嵌套对象名称

时间:2012-06-22 15:31:20

标签: scala reflection

我想知道类中给定对象的名称

class B {
   abstract class F{
       def name = getClass.getSimpleName
   }
   object FI extends F
}

val b = new B
println(b.FI)

使用Scala 2.9.1,它会打印B $ FI $

使用Scala 2.9.2打印FI $

我真正想要的是“FI”。获取FI的最佳方法是什么,并确保它在未来版本的scala中不会改变?是否有一些反思支持来帮助我?

1 个答案:

答案 0 :(得分:5)

这可以通过Scala 2.10中引入的新反射API实现,如下所示:

scala> import scala.reflect.runtime.universe._
import scala.reflect.runtime.universe._

scala> val mirror = runtimeMirror(getClass.getClassLoader)
mirror: reflect.runtime.universe.Mirror = JavaMirror with scala.tools.nsc.interpreter.IMain$TranslatingClassLoader@609a5d54 of type class scala.tools.nsc.interpreter.IMain$TranslatingClassLoader with classpath <unknown>

scala> mirror.reflect(new B().FI).symbol.name
res24: reflect.runtime.universe.Name = FI