Arrays.asList() 不能正常工作吗?
我有一个float[],现在希望将将其转换为形同元素的List。比较傻的方法是将其一个一个的加进去,但是我想用 Arrays.asList方法。在这个过程中出现了一些问题。
这样是有效的:
List<Integer> list = Arrays.asList(1,2,3,4,5);
但是这样是无效的:
int[] ints = new int[] {1,2,3,4,5};
List<Integer> list = Arrays.asList(ints);
据我所知,asList 方法接受一个varargs 参数,这个可变参数是数组的简写。
问题:
1. 为什么对二段代码返回的是一个List<int[]>而不是List<int>。
2. 是否存在一种正确转换的方法。
3. 为什么自动类型转换没有起作用,例如 int[]转换为Integer[]。
回答:
在java的基础支持中没有List<int>这种东西。
自动封装只发生在单个元素之间,不会发生在基本数组类型中。
至于如何实现它,不同的libraries 有大量的方法实现这一目的。这是没有办法解决的问题,而且我认为JDK中也没有什么能让它变得更容易。
译者注:
1. 泛型不可能是基本数据类型。T只能是类,不能用基本数据类型填充。但可以使用包装类填充。
2. asList的实现细节: 参见https://www.cnblogs.com/liqing-weikeyuan/p/7919720.html
public static <T> List<T> asList(T... a) {
return new ArrayList<>(a);
}
值得注意的是return new ArrayList<>(a);中的ArrayList并不是ArrayList.class而是Arrays$ArrayList这样一个内部类
3. 对于可变参数T... a。如果初始化为("aa", "bb")。在函数内部,a就是String[2]。