编写以下代码时出现此编译错误
Boolean[] booleans = new Boolean[]{true, false, false};
String[] strings = new String[]{"hello", "world"};
Integer[] integers = new Integer[]{1, 2, 3, 4};
// When the above instances are cast to Object[], it all works fine
Object[] booleansObj = (Object[])booleans;
Object[] stringsObj = (Object[])strings;
Object[] integersObj = (Object[])integers;
// When the above instances are cast to List<T>. String and Integer still
// works, but not for Boolean
List<String> stringsList = (List<String>)strings;
List<Integer> integersList = (List<Integer>)integers;
// this will have Cannot cast from Boolean[] to List<Boolean> error
List<Boolean> booleansList = (List<Boolean>)booleans;
我的问题是为什么Boolean []无法转换为List?
答案 0 :(得分:2)
这不起作用的原因是因为数组不是列表。仅当对象位于同一继承层次结构中时,强制转换才有效。您可以在此answer了解有关投射的更多信息。
如果要从某个数组到列表,则需要创建一个新列表并使用该数组初始化,或使用foo.send(Array.shift)
Array.shift(foo)
。如果您想要一个可以更改所包含项目数的列表,则需要进行第二次转换,Arrays.asList(array)
。
像这样:
new ArrayList(Arrays.asList(array))
答案 1 :(得分:1)
这三个演员中没有一个会编译好
数组不是List
类的子类,因此无法在尝试时将其下载到List
。
要将数组转换为List
,可以使用接受通用变量的Arrays.asList(T... a)
方法,并返回由指定数组支持的固定大小的通用列表。
例如,这是有效的:
List<String> stringsList = Arrays.asList(strings);
List<Integer> integersList = Arrays.asList(integers);
List<Boolean> booleansList = Arrays.asList(booleans);