在Scala 2.10中获取java.lang.Class [T]的Scala类型
发布时间:2020-12-16 09:05:54 所属栏目:安全 来源:网络整理
导读:我在看 the scala reflection overview,我想知道是否可以使用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:
我在看
the scala reflection overview,我想知道是否可以使用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方法而不更改其签名,以便能够使用新的Reflector().parse(String.class)从java调用它? 解决方法
您可以像这样实现您的方法:
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 library感兴趣,因为它包含类似的方法 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 } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |