在 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中文网其他相关文章!