例如:
我有一个类foo[A] {...}
,我用foo [Int]创建了一个对象,之后我想在其代码的主体中获取A中的数据类型以进行一些处理。
当我提到' A'通过在类的主体中使用A.isInstanceOf[...]
,它表示找不到值A.
有没有办法提取在Scala和/或Java中对象实例化后传递的类型参数的特定数据类型?
答案 0 :(得分:4)
Scala TypeTag是您正在寻找的,请参阅 http://docs.scala-lang.org/overviews/reflection/typetags-manifests.html
作为隐式使用,编译器负责“传入”关于构造时间的underlIng类型信息。因此,您可以稍后参考该信息。
P.S。在早期版本的Scala中,mst指出了Manifest
......
答案 1 :(得分:1)
一般的答案是 - 这是不可能的。泛型类型在编译阶段被删除。
但是,您可以查看scala如何与Manifest
(ClassTag
用于新的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
相比,这可以让您更轻松地使用不同的泛型类型。