先来看源码
- 当我们调用Arrays.asList(array) 时,实际是执行了包可见的ArrayList的构造函数(注意通常这个构造函数对用户是不可见的,所以不能通过
List list = new ArrayList(array)来进行转换
) - 由于a是一个E[]数组,E又是ArrayList的泛型,所以我们传入的实参array必须是对象数组,或者对象列表
- 如果传入的是基本类型数组,整个数组会被当做一个对象,从而
Arrays.asList(new char[]{'a','b'});
转换的类型为List<char[]>
public static <T> List<T> asList(T... a) {
return new ArrayList<>(a);
}
ArrayList(E[] array) {
if (array==null)
throw new NullPointerException();
a = array;
}
private final E[] a;
private static class ArrayList<E> extends AbstractList<E>
正确的转换方式
利用自动装箱机制,循环添加元素
public class Demo {
public static void main(String[] args) {
List<Character> list = new ArrayList<Character>();
char[] chs = new char[]{'a', 'b'};
for (Character ch : chs) {
list.add(ch);
}
System.out.println(list);
}
}