В Scala, как мне получить имя * объекта `object` (а не экземпляр класса)? - программирование
Подтвердить что ты не робот

В Scala, как мне получить имя * объекта `object` (а не экземпляр класса)?

В Scala я могу объявить объект следующим образом:

class Thing

object Thingy extends Thing

Как мне получить "Thingy" (имя объекта) в Scala?

Я слышал, что Lift (веб-фреймворк для Scala) способен на это.

4b9b3361

Ответ 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