在 Scala 中,我可以像这样声明一个对象:
class Thing
object Thingy extends Thing
我将如何"Thingy"
在 Scala 中获得(对象的名称)?
我听说 Lift(Scala 的 Web 框架)能够做到这一点。
在 Scala 中,我可以像这样声明一个对象:
class Thing
object Thingy extends Thing
我将如何"Thingy"
在 Scala 中获得(对象的名称)?
我听说 Lift(Scala 的 Web 框架)能够做到这一点。
如果您将其声明为 acase object
而不仅仅是 anobject
那么它将自动扩展Product
特征,您可以调用该productPrefix
方法来获取对象的名称:
scala> case object Thingy
defined module Thingy
scala> Thingy.productPrefix
res4: java.lang.String = Thingy
只需获取类对象,然后获取其名称。
scala> Thingy.getClass.getName
res1: java.lang.String = Thingy$
剩下的就是删除$
.
编辑:
要删除封闭对象的名称和拖尾$
就足够了
res1.split("\\$").last
我不知道哪种方式是正确的方式,但这可以通过 Scala 反射来实现:
implicitly[TypeTag[Thingy.type]].tpe.termSymbol.name.toString
def nameOf[T](implicit ev: ClassTag[T]):String = ev.runtimeClass.getName.replace("$", "")