我看阶反射概述 ,我想知道如果它是可以使用java.lang.Class<T>
如Scala中2.10类型。
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?
}
}
是否有可能实现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
然后调用它是这样的:
implicit val mirror = ru.runtimeMirror(getClass.getClassLoader)
getType(classOf[String])
你可能会感兴趣的smirror库 ,因为它包含了类似的方法
def sClassOf[T](clazz: Class[T])(implicit runtimeMirror: Mirror): SClass[T]
其中SClass
包含一个typ
特性。
编辑
你可能想的方法来改变这种(将保持相同的签名)
def getType[T](clazz: Class[T]):ru.Type = {
val runtimeMirror = ru.runtimeMirror(clazz.getClassLoader)
runtimeMirror.classSymbol(clazz).toType
}