我有一些像这样的嵌套对象:
object Routes {
object admin {
def home = "/admin/home/"
def module(m:Module) = "/admin/module/"+m.code
}
}
可通过Routes.admin.module(mymod)
等访问。
鉴于Routes对象,我希望能够通过其名称“admin”访问admin对象,以便将其暴露给我正在使用的模板引擎(Freemarker)。这是基于我提出的标准Java Reflection API的解决方案,似乎有用:
val obj = Routes
val key = "admin"
Class.forName(obj.getClass.getName+key+"$").getField("MODULE$").get(null)
这会找到单个对象所在的静态字段Routes$admin$.MODULE$
。是否有一种更简洁的方法,不需要嵌入Scala字节码的命名约定知识?
答案 0 :(得分:2)
使用Scala 2.10M4中的新Reflection API,可以使用:
import scala.reflect.runtime.{universe => u}
val t = u.typeOf[Routes.type]
val adminName = u.newTermName("admin")
val admin = t.member(adminName)
// work with admin