无法从Boolean []转换为List <boolean>

时间:2018-02-02 19:40:11

标签: java casting

编写以下代码时出现此编译错误

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?

2 个答案:

答案 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);