在Scala中,我可以这样声明一个对象:
class Thing
object Thingy extends Thing
我该如何在Scala中获取"Thingy"
(对象的名称)?
我听说Lift(Scala的Web框架)可以做到这一点。
在Scala中,我可以这样声明一个对象:
class Thing
object Thingy extends Thing
我该如何在Scala中获取"Thingy"
(对象的名称)?
我听说Lift(Scala的Web框架)可以做到这一点。
如果你将它声明为一个case object
而不仅仅是一个object
,那么它将自动扩展Product
trait,并且你可以调用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
Thingy.getClass.getName
=> "Thingy$"
,但是 println(Thingy.getClass.getName)
打印出 "$line2.$read$$iw$$iw$Thingy$"
。有人能解释一下吗? - Scoobieimplicitly[TypeTag[Thingy.type]].tpe.termSymbol.name.toString
def nameOf[T](implicit ev: ClassTag[T]):String = ev.runtimeClass.getName.replace("$", "")