陣列可以儲存泛型項嗎?
泛型型別和陣列在 Java 中的互動方式不同。考慮以下程式碼:
ArrayList a = new ArrayList();
此程式碼編譯成功,建立一個名為 a 的通用 ArrayList。但是,下面的程式碼無法編譯通過:
ArrayList[] a = new ArrayList[10];
這是為什麼呢?看來數組和泛型是不相容的。為了理解這一點,讓我們探討一下 Java 中的類型擦除。
類型擦除:幕後花絮
當 Java 編譯時,它會執行類型擦除,它將泛型類型資訊替換為原始類型(物件)。這可以防止出現諸如將字串放入整數數組列表之類的錯誤。但是,陣列需要原始類型,而泛型不能表示為原始類型。
修復數組問題
要建立泛型項數組,您可以明確將數組轉換為所需的類型:
ArrayList[] a = (ArrayList[]) new ArrayList[10];
此轉換指示編譯器該陣列應視為具有關鍵元素的 ArrayList 陣列。
列表列表:例外
在 Java 中,列表列表不被視為數組。因此,以下程式碼無需類型轉換即可編譯:
ArrayList> b = new ArrayList>();
出現這種差異是因為ArrayList是非數組類型。
結論
由於類型擦除,數組和泛型類型在 Java 中存在限制。但是,透過將數組明確轉換為所需的泛型類型或使用列表列表,可以克服這些限制並在兩種上下文中有效地使用泛型類型。
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3