我對此進行了廣泛的研究,無法找到適用於此場景的最佳實踐。Java通配符鑄造的最佳實踐
ArrayList<GenericObject<?>> list = new ArrayList<>();
list.add(new GenericObject<Integer>(6)); // Autoboxing
list.add(new GenericObject<String>("HI"));
if(list.get(0).getGenaricValue().getClass() == Integer.class){
GenericObject<Integer> gi = (GenericObject<Integer>) list.get(0);
System.out.println("Was Integer");
System.out.println(gi);
}
}
while this block of code works from cast GenericObject <? >到GenericObject <Integer>給出未經檢查的警告。現在你可以看到我用if語句清楚地檢查了類型,所以我對異常沒有偏執,但是有沒有更好的方法來做到這一點,而不必禁止未經檢查的警告?這種情況下是否有最佳做法? 我已經閱讀了整個泛型Oracle教程 here,我已經閱讀了很多stackoverflow的帖子,但似乎沒有回答這個問題。任何幫助,將不勝感激謝謝。
非常人爲的例子?無論如何添加通配符實例,通用包裝器的意義何在?順便說一句,該對象包含實際上是一個'Integer'並不意味着它必須是一個'GenericObject',它也可能是一個'GenericObject '(因此允許一些方法替代「盒裝」'Integer'用'Double') –
mihi
解決這大概有'GenericObject最好的辦法'採取另一種'類'爲參數,並將其存儲,並有一個靜態輔助流延法(抑制unchecked警告),其採用在'GenericObject >'和'類'並將它轉換爲'GenericObject '後已經驗證所存儲的'類'值。 –
mihi
謝謝@mihi。我看到你關於類被定義爲類型號的觀點,並且有一個類傳遞了一個整數。這是一個很好的觀點,我沒有想到這一點。至於這個例子的重點。假設我有一個所有類型的數據表。我想把它放在表格中,所以我創建了一個名爲Column的對象;列也有類型T的ArrayList。如果我把所有這些列放在一個ArrayList中,我會有ArrayList >;現在我需要添加一個新行。我將不得不將所有列轉換爲它們的信號類型,以便將值添加到它們的內部數組中 –
rickmaster