2011-08-31 124 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

相關問題