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



例如:

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

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

Scala类型标签是您想要的,请参阅http://docs.scala-lang.org/overviews/reflection/typetags-manifests.html

作为隐式使用,编译器负责在构造时"传入"底层类型信息。所以,你可以稍后参考这些信息。。

附言:正如mst所指出的,在Scala的旧版本中有Manifest。。。

一般的答案是-这是不可能的。泛型类型在编译阶段被擦除。但您可以看看scala是如何与Manifest(新scala版本为ClassTag)一起工作的

如何在Scala上绕过类型擦除?或者,为什么可以';我没有得到集合的类型参数吗?

有没有一种方法可以从Scala中的Manifest[List[X]中提取项类型?

在Java中,您可以使用Guava TypeToken作为@JoopEggen回答中提到的Class的替代方案。这将使您能够比直接使用Type更容易地处理不同的泛型类型。

最新更新