2011-08-31 109 views
2

我无法搞清楚如何获得期权的类型参数时,类型参数为int为什么getActualTypeArguments返回Object而不是Integer for Option [Int]?

我尝试下面的代码:

class TestClass { 
    val intField: Option[Int] = Some(1) 
} 

val cls = new TestClass 
val field = cls.getDeclaredField("intField") 
val typeParams = field.getGenericType.asInstanceOf[ParameterizedType].getActualTypeArguments 

typeParams给我java.lang.Object继承

我的问题是如何让它返回java.lang.Integer给我

回答

7

确切的泛型类型信息在运行时丢失。见Reflecting generics并注意:

...而JVM 不会跟踪情况泛型类的实际类型参数,它跟踪的实际类型参数的泛型类的子类。

没有子类这里 - 因此Object,而不是Integer的原因。也许看看Manifests (a Scala trick for implicit reified types)

快乐编码。

+0

谢谢,使用java.lang.Integer而不是Int工作虽然 – shangc

+0

@shangc奇怪...斯卡拉仍然神秘我:( – 2011-09-01 18:56:47

相关问题