Jon*_*ler 3 reflection scala scala-java-interop
我正在查看scala反射概述,我想知道是否可以java.lang.Class<T>在Scala 2.10中使用a 作为类型.
import scala.reflect.runtime.{ universe => ru }
class Reflector {
def getType: ru.Type = {
ru.typeOf[java.lang.String]
}
def getType[T](clazz: Class[T]): ru.Type = {
//is it possible to implement me?
}
}
Run Code Online (Sandbox Code Playgroud)
是否可以在parse[T](clazz: Class[T]): ru.Type不更改其签名的情况下实现该方法,以便能够从java中调用它new Reflector().parse(String.class)?
您可以像这样实现您的方法:
def getType[T](clazz: Class[T])(implicit runtimeMirror: ru.Mirror) =
runtimeMirror.classSymbol(clazz).toType
Run Code Online (Sandbox Code Playgroud)
然后像这样调用它:
implicit val mirror = ru.runtimeMirror(getClass.getClassLoader)
getType(classOf[String])
Run Code Online (Sandbox Code Playgroud)
您可能对smirror库感兴趣,因为它包含类似的方法
def sClassOf[T](clazz: Class[T])(implicit runtimeMirror: Mirror): SClass[T]
Run Code Online (Sandbox Code Playgroud)
其中SClass包含一个typ属性.
您可能希望将方法更改为此(将保留相同的签名)
def getType[T](clazz: Class[T]):ru.Type = {
val runtimeMirror = ru.runtimeMirror(clazz.getClassLoader)
runtimeMirror.classSymbol(clazz).toType
}
Run Code Online (Sandbox Code Playgroud)