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

时间:2015-10-30 11:27:03

标签: java scala generics

例如:

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

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

3 个答案:

答案 0 :(得分:4)

Scala TypeTag是您正在寻找的,请参阅 http://docs.scala-lang.org/overviews/reflection/typetags-manifests.html

作为隐式使用,编译器负责“传入”关于构造时间的underlIng类型信息。因此,您可以稍后参考该信息。

P.S。在早期版本的Scala中,mst指出了Manifest ......

答案 1 :(得分:1)

一般的答案是 - 这是不可能的。泛型类型在编译阶段被删除。 但是,您可以查看scala如何与ManifestClassTag用于新的scala版本)一起使用

How do I get around type erasure on Scala? Or, why can't I get the type parameter of my collections?

Is there a way to extract the item type from a Manifest[List[X]] in Scala?

答案 2 :(得分:0)

在Java中,您可以使用Guava TypeToken替代@ JoopEggen的答案中提到的Class。与直接使用Type相比,这可以让您更轻松地使用不同的泛型类型。