В Scala, как мне получить имя * объекта `object` (а не экземпляр класса)?
В Scala я могу объявить объект следующим образом:
class Thing
object Thingy extends Thing
Как мне получить "Thingy"
(имя объекта) в Scala?
Я слышал, что Lift (веб-фреймворк для Scala) способен на это.
Ответы
Ответ 1
Просто получите объект класса, а затем его имя.
scala> Thingy.getClass.getName
res1: java.lang.String = Thingy$
Все, что осталось, - удалить $
.
EDIT:
Чтобы удалить имена окружающих объектов и хвост $
, достаточно сделать
res1.split("\\$").last
Ответ 2
Если вы объявите его как case object
, а не только object
, то он автоматически расширит черту Product
, и вы можете вызвать productPrefix
для получения имени объекта:
scala> case object Thingy
defined module Thingy
scala> Thingy.productPrefix
res4: java.lang.String = Thingy
Ответ 3
Я не знаю, какой путь правильный, но это может быть достигнуто с помощью Scala reflection:
implicitly[TypeTag[Thingy.type]].tpe.termSymbol.name.toString