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
Java 如何提取泛型类型参数的数据类型?_Java_Scala_Generics - Fatal编程技术网

Java 如何提取泛型类型参数的数据类型?

Java 如何提取泛型类型参数的数据类型?,java,scala,generics,Java,Scala,Generics,例如: 我有一个类foo[a]{…},我用foo[Int]创建了一个对象,然后我想在其代码体中获取a中的数据类型,以便进行一些处理。 当我在类的主体中使用A.isInstanceOf[…]引用“A”时,它表示找不到值A 有没有办法提取在Scala和/或Java中对象实例化后传递的类型参数的特定数据类型?一般的答案是——这是不可能的。泛型类型在编译阶段被擦除。 但是您可以了解scala是如何与清单一起工作的(对于新的scala版本,类标签) 一般的答案是——这是不可能的。泛型类型在编译阶段被擦除

例如:

我有一个类
foo[a]{…}
,我用foo[Int]创建了一个对象,然后我想在其代码体中获取a中的数据类型,以便进行一些处理。 当我在类的主体中使用
A.isInstanceOf[…]
引用“A”时,它表示找不到值A


有没有办法提取在Scala和/或Java中对象实例化后传递的类型参数的特定数据类型?

一般的答案是——这是不可能的。泛型类型在编译阶段被擦除。 但是您可以了解scala是如何与
清单
一起工作的(对于新的scala版本,
类标签


一般的答案是——这是不可能的。泛型类型在编译阶段被擦除。 但是您可以了解scala是如何与
清单
一起工作的(对于新的scala版本,
类标签


您需要的是Scala类型标签,请参阅

作为隐式使用,编译器负责在构造时“传入”下划线类型信息。因此,您可以稍后参考该信息


另外,在较旧版本的Scala中,正如mst所指出的,
Manifest

Scala类型标签就是您要寻找的,请参阅

作为隐式使用,编译器负责在构造时“传入”下划线类型信息。因此,您可以稍后参考该信息


另外,在较旧版本的Scala中,正如mst所指出的那样,
Manifest

在Java中,您可以使用它作为@JoopEggen回答中提到的
的替代品。这将使您比直接使用更容易处理不同的泛型类型

在Java中,您可以使用@JoopEggen的答案中提到的
。这将使您比直接使用更容易处理不同的泛型类型

Manifest
当前已弃用,您应该使用
ClassTag
而不是
Manifest
当前已弃用,您应该使用
ClassTag