我在看scala 反射概述 http://docs.scala-lang.org/overviews/reflection/overview.html我想知道是否可以使用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])
您可能感兴趣镜像库 https://github.com/fwbrasil/smirror因为它包含类似的方法
def sClassOf[T](clazz: Class[T])(implicit runtimeMirror: Mirror): SClass[T]
Where SClass
包含一个typ
财产。
Edit
您可能想将方法更改为此(这将保持相同的签名)
def getType[T](clazz: Class[T]):ru.Type = {
val runtimeMirror = ru.runtimeMirror(clazz.getClassLoader)
runtimeMirror.classSymbol(clazz).toType
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)