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



当类型参数为Int时,我很难弄清楚如何获得Option的类型参数

我尝试了以下代码:

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

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

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

这里没有子类——这就是Object而不是Integer的原因。也许可以研究一下manifest(一种用于隐式具体化类型的Scala技巧)?

快乐编码。

相关内容

  • 没有找到相关文章