例如:
我有一个类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
更容易地处理不同的泛型类型。