我有一個類foo[A] {...}
,我創建的對象以foo [INT],之後,我想在A中的數據類型在其用於一些處理代碼的主體。 當我在班級的主體中使用A.isInstanceOf[...]
來提到'A'時,它表示未找到值A.
有沒有什麼辦法可以提取在Scala和/或Java中的對象實例化後傳遞的類型參數的特定數據類型?
我有一個類foo[A] {...}
,我創建的對象以foo [INT],之後,我想在A中的數據類型在其用於一些處理代碼的主體。 當我在班級的主體中使用A.isInstanceOf[...]
來提到'A'時,它表示未找到值A.
有沒有什麼辦法可以提取在Scala和/或Java中的對象實例化後傳遞的類型參數的特定數據類型?
Scala的類型標籤,你在找什麼,看到 http://docs.scala-lang.org/overviews/reflection/typetags-manifests.html
作爲隱含的編譯器負責在工程時間內「傳入」下面的類型信息。因此,您可以稍後參考該信息。
P.S.在舊版本的Scala中有Manifest
mst指出...
一般的答案是 - 這是不可能的。泛型類型在編譯階段被刪除。 但是你可以看看到如何斯卡拉作品與Manifest
(ClassTag
新斯卡拉版本)
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?
在Java中,您可以使用Guava TypeToken
作爲@ JoopEggen的答案中提到的Class
的替代方法。這將使您可以比直接使用Type
更容易使用不同的通用類型。
'Manifest'目前已被棄用,您應該使用'ClassTag'代替 –