如何将Generic类型设置为Reflect类型变量?

时间:2018-04-16 14:42:39

标签: scala generics reflection

我有一个接受Generic类型的类,但我想在运行时使用Reflect.Type变量将泛型类型传递给类。该课程记录在此处:https://docs.oracle.com/javase/8/docs/api/java/lang/reflect/Type.html

我编写了一个函数,它接受一个通用类型类名列表作为字符串,并使用反射将它们映射到相应的通用类型

def getGenericTypeByName(names: Map[String, String]): Map[String, reflect.Type] = {

  val declaredFields = Types.getClass.getDeclaredFields.toSeq;

  val types: Map[String, reflect.Type] = names.map(s => {
    val fieldType = declaredFields.find(_.getName.equals(s._2)).getOrElse(null);
    if (fieldType != null) {
      (s._1, fieldType.getGenericType);
    } else {
      (s._1, null);
    }
  });
}

返回值是一个Reflect.Type的Map,它应该可以传递给类中的Generic类型参数,所以我应该能够这样做:

types.map(s => this.GenericClassMap.get(s._1).get.read[s._2]());

但是当我编译时,我收到错误Cannot resolve symbol _2

这里缺少什么? _2应该是可访问的,因为它是一张地图,而且我认为它也应该与泛型类型相匹配。

0 个答案:

没有答案