2012-07-16 19 views
8

爲什麼下面的代碼片段不能編譯?具有通用集合的instanceof

if (mangoList instanceof List<Mango>) { System.out.println("true"); } 
  • 你不知道mangoList是一個列表類型。
  • instanceof關鍵字只適用於原始類型。
  • 您只能使用反射來檢查集合的類型。
  • 通用類型在運行前擦除(ans)
  • 該語句可能會導致mangoList被設置爲List的實例。

你認爲哪一個答案是正確的?

+0

哪個_you_認爲是正確答案?爲什麼? – Bernard 2012-07-16 00:44:01

回答

7

正確答案是您標記爲ans的那個。您將能夠知道mangoListList,但是您將無法獲得其擦除參數的類型。重新選擇是沒有道理的。

+0

太棒了,是啊,這是我猜測..謝謝你的快速答案 – 2012-07-16 00:15:34

0

但是,您可以使用mangoList instanceof List來檢查它是否是某種類型的List。例如,如果您不確定是否有List或Mango對象,這很有用,但不能區分不同類型的列表。爲此,我建議您檢查第一個元素的類型。

3

1.是「泛型類型在運行期間被擦除」。

2.所以你不能告訴列表的類型。

3.但是您將會認識到mangoList是一個List。