为什么getActualTypeArguments为Option [Int]返回Object而不是Integer?

时间:2011-08-31 23:28:19

标签: scala reflection type-erasure

当type参数为Int

时,我无法弄清楚如何获取Option的type参数

我尝试了以下代码:

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返回给我

1 个答案:

答案 0 :(得分:7)

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

  
    

...虽然JVM 不会跟踪泛型类的实例的实际类型参数,但它会跟踪泛型类的子类的实际类型参数。

  

此处没有子类 - 因此Object而非Integer的原因。也许看看Manifests (a Scala trick for implicit reified types)

快乐的编码。