我对反射API还不熟悉。
我想通过对象名称获取一个引用。我已经通过对象的类名获得了一个引用。
$ scala
Welcome to Scala version 2.11.7 ...
scala> case object Foo { val x = 5 }
defined object Foo
scala> import scala.reflect.runtime.{universe => ru}
import scala.reflect.runtime.{universe=>ru}
scala> val m = ru.runtimeMirror(getClass.getClassLoader)
m: reflect.runtime.universe.Mirror...
scala> val f = m.reflectModule(m.staticModule(Foo.getClass.getName)).instance.asInstanceOf[Foo.type]
f: Foo.type = Foo
scala> f.x
res0: Int = 5
功能正常。但是,尝试将计算类型名称用作字符串是行不通的:
scala> m.staticModule(Foo.getClass.getName)
res2: reflect.runtime.universe.ModuleSymbol = object iw$Foo$
scala> Foo.getClass.getName
res1: String = Foo$
scala> m.staticModule("Foo$")
scala.ScalaReflectionException: object Foo$ not found.
at scala.reflect.internal.Mirrors$RootsBase.staticModule(Mirrors.scala:162)
at scala.reflect.internal.Mirrors$RootsBase.staticModule(Mirrors.scala:22)
... 33 elided
这里我漏掉了什么吗?谢谢。