在 Java 中,Arrays.asList() 方法從陣列建立不可修改的清單。它支援可變參數參數,這可以方便地傳遞值數組。但是,將 Arrays.asList() 與原始陣列類型一起使用可能會導致意外結果。
考慮以下程式碼:
float[] floatArray = {1.0f, 2.0f, 3.0f}; List<Float> floatList = Arrays.asList(floatArray); // Works int[] intArray = {1, 2, 3}; List<Integer> intList = Arrays.asList(intArray); // Incorrect
在第一個範例中,Arrays.asList() 成功建立清單
為什麼會出現意外行為?
Java 泛型不支援原始型別。相反,他們使用 Integer 和 Float 等包裝類別來表示這些值。當使用原始陣列呼叫 Arrays.asList() 時,它會嘗試建立對應包裝類別的清單。然而,由於沒有 List
如何修正它
取得List
intArray = {1, 2, 3}; Integer[] intObjects = new Integer[intArray.length]; for (int i = 0; i < intArray.length; i++) { intObjects[i] = Integer.valueOf(intArray[i]); } List<Integer> intList = Arrays.asList(intObjects); // Correct
為何自動裝箱不適用於陣列
自動裝箱僅適用於單一基元,不適用於整個陣列。例如,表達式 Integer.valueOf(intArray) 不會將 intArray 的所有元素自動裝箱到 Integer 物件中。相反,它將導致編譯時錯誤。
替代解決方案
或者,您可以使用其他函式庫提供將原始陣列轉換為包裝器清單的方法類別。例如,Guava 函式庫提供了 Ints.asList() 方法,它將原始 int[] 包裝到 List
以上是Java 的 Arrays.asList() 方法對原始陣列有哪些限制和意外行為?的詳細內容。更多資訊請關注PHP中文網其他相關文章!