Java 的泛型功能允許建立類型安全的容器,但在下列情況下面臨挑戰處理數組。了解這些限制對於避免意外錯誤至關重要。
數組具有協方差,這意味著超類型的數組可以保存子類型的元素。但是,泛型強制執行更強大的類型檢查,並且不允許這種行為,從而確保編譯時的類型安全。
數組使用數組儲存檢查在運行時強制執行類型檢查。另一方面,泛型會經歷類型擦除,這意味著類型資訊在運行時丟失。這種差異會導致在使用泛型和陣列時出現不同的操作。
禁止使用泛型元件類型建立數組,因為它的類型不安全的性質。考慮以下範例:
public <T> T[] getArray(int size) { T[] arr = new T[size]; // Type-unsafe, not allowed return arr; }
在執行時,該陣列實際上是一個 Object[],當分配給 Integer[] 的參考時,它不會正確進行類型檢查。
代碼E[] 元素= (E[]) 新物件[10];由於警告抑制類型轉換而起作用。但是,這種解決方法並不總是安全的,並且可能會導致運行時錯誤,尤其是在處理不受信任的輸入時。
數組建立是允許無界通配符類型,因為它們是可具體化的,這意味著它們具有未指定的類型參數。這是安全的,因為陣列可以保存任何類型的元素。
安全地建立陣列對於通用元件類型,請使用 Array.newInstance()。此方法將元件類型的 Class 物件和所需的陣列大小作為參數。
public <E> E[] getArray(Class<E> clazz, int size) { @SuppressWarnings("unchecked") E[] arr = (E[]) Array.newInstance(clazz, size); return arr; }
透過了解這些限制並採用建議的解決方法,Java 開發人員可以有效地處理泛型和數組,同時確保類型安全。
以上是為什麼我不能在 Java 中建立通用數組,有哪些安全的替代方案?的詳細內容。更多資訊請關注PHP中文網其他相關文章!