将对象数组转换为通用数组

时间:2015-07-03 08:38:48

标签: java generics arraylist typecasting-operator

目前,我正在查看java.util.ArrayList的源代码。现在我发现函数 public void ensureCapacity(int minCapacity)将一个对象数组转换为一个通用数组,就像下面的代码一样:

 E[] newData = (E[]) new Object[Math.max(current * 2, minCapacity)];

但是,当我将数组声明为特定类型时,IDE将显示错误。

Object[] arr = new Object[10];
    int[] arr1 = (int[]) new Object[arr.length];

任何人都能告诉我他们之间的区别吗?非常感谢。

3 个答案:

答案 0 :(得分:3)

您永远不能将引用类型(从Object扩展的任何内容)转换为基本类型(intlongbooleanchar,等)。

您也不能将像Object[]这样的引用类型的数组转换为像int[]这样的基本类型的数组。

基元不能代表通用参数。

答案 1 :(得分:3)

这是因为E(在ArrayList的源代码中)代表某些引用类型,但不代表某些原语类型。

这就是为什么在尝试将Object个实例数组转换为基元数组时会出现编译时错误的原因。

如果你这样做(例如)

Object[] arr = new Object[10];
Integer[] arr1 = (Integer[]) new Object[arr.length];

错误将消失。

答案 2 :(得分:2)

.Background { display: block; margin-left: auto; margin-right: auto; width: 100vw; height: 100vh; background-image: url('background.png'); background-size: cover; } 不是int,但它是原始的。

使用Object,它会起作用。

Integer