我有一个类foo[A] {...}
,我创建的对象以foo [INT],之后,我想在A中的数据类型在其用于一些处理代码的主体。 当我在班级的主体中使用A.isInstanceOf[...]
来提到'A'时,它表示未找到值A.
有没有什么办法可以提取在Scala和/或Java中的对象实例化后传递的类型参数的特定数据类型?
我有一个类foo[A] {...}
,我创建的对象以foo [INT],之后,我想在A中的数据类型在其用于一些处理代码的主体。 当我在班级的主体中使用A.isInstanceOf[...]
来提到'A'时,它表示未找到值A.
有没有什么办法可以提取在Scala和/或Java中的对象实例化后传递的类型参数的特定数据类型?
Scala的类型标签,你在找什么,看到 http://docs.scala-lang.org/overviews/reflection/typetags-manifests.html
作为隐含的编译器负责在工程时间内“传入”下面的类型信息。因此,您可以稍后参考该信息。
P.S.在旧版本的Scala中有Manifest
mst指出...
一般的答案是 - 这是不可能的。泛型类型在编译阶段被删除。 但是你可以看看到如何斯卡拉作品与Manifest
(ClassTag
新斯卡拉版本)
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?
在Java中,您可以使用Guava TypeToken
作为@ JoopEggen的答案中提到的Class
的替代方法。这将使您可以比直接使用Type
更容易使用不同的通用类型。
'Manifest'目前已被弃用,您应该使用'ClassTag'代替 –