在Scala中,如何获取`object`的* name *(不是类的实例)?

时间:2012-10-21 05:25:11

标签: class scala object reflection jvm-languages

在Scala中,我可以声明一个这样的对象:

class Thing

object Thingy extends Thing

如何在Scala中获得"Thingy"(对象的名称)?

我听说Lift(Scala的Web框架)能够做到这一点。

4 个答案:

答案 0 :(得分:21)

只需获取类对象,然后获取其名称。

scala> Thingy.getClass.getName
res1: java.lang.String = Thingy$

剩下的就是删除$

编辑:

要删除封闭对象的名称和尾部$,只需执行

即可
res1.split("\\$").last

答案 1 :(得分:21)

如果您将其声明为case object而不仅仅是object,那么它会自动扩展Product trait,您可以调用productPrefix方法来获取对象的名:

scala> case object Thingy
defined module Thingy

scala> Thingy.productPrefix
res4: java.lang.String = Thingy

答案 2 :(得分:2)

我不知道哪种方式是正确的方法,但这可以通过Scala反射来实现:

implicitly[TypeTag[Thingy.type]].tpe.termSymbol.name.toString

答案 3 :(得分:0)

def nameOf[T](implicit ev: ClassTag[T]):String = ev.runtimeClass.getName.replace("$", "")