在Scala中,我可以声明一个这样的对象:
class Thing
object Thingy extends Thing
如何在Scala中获得"Thingy"
(对象的名称)?
我听说Lift(Scala的Web框架)能够做到这一点。
答案 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("$", "")