Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 如何将泛型类型设置为反射类型变量?_Scala_Generics_Reflection - Fatal编程技术网

Scala 如何将泛型类型设置为反射类型变量?

Scala 如何将泛型类型设置为反射类型变量?,scala,generics,reflection,Scala,Generics,Reflection,我有一个接受泛型类型的类,但我想在运行时使用Reflect.type变量将泛型类型传递给该类。课程记录如下: 我编写了一个函数,它将泛型类型类名列表作为字符串接受,并使用反射将它们映射到相应的泛型类型 def getGenericTypeByName(names: Map[String, String]): Map[String, reflect.Type] = { val declaredFields = Types.getClass.getDeclaredFields.toSeq;

我有一个接受泛型类型的类,但我想在运行时使用Reflect.type变量将泛型类型传递给该类。课程记录如下:

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

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的映射,它应该可以传递到类中的泛型类型参数,因此我应该能够做到:

types.map(s => this.GenericClassMap.get(s._1).get.read[s._2]());
但是当我编译时,我得到了错误
无法解析符号\u 2


这里少了什么_2应该是可访问的,因为它是一个映射,并且它是一个反射类型,我认为它也应该与泛型类型匹配。

您试图在需要类型的地方使用计算值。类型值与类型不同。因此,找不到
s._2
。如果知道
t
是什么,您将无法以这种方式调用
read[t]()
方法。如果编译时已知
T
,则可以
match
与该值匹配,并在matching子句中调用
read[T]()
。这一问题的答案取决于您试图对(擦除的)类型执行的操作。您能否同时提供正在调用的
read
方法?简而言之,您需要向方法添加一个隐式
ClassTag
TypeTag
参数。