我想知道类中给定对象的名称
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中不会改变?是否有一些反思支持来帮助我?
答案 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