加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

在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
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读