[英]Cast object array to generic array
目前,我正在查看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];
任何人都能告诉我他们之间的差异吗? 非常感谢。
您永远不能将引用类型(从Object
扩展的任何内容)转换为基本类型( int
, long
, boolean
, char
等)。
您也不能将像Object[]
这样的引用类型的数组转换为像int[]
这样的基本类型的数组。
原语不能代表通用参数。
这是因为E
(在ArrayList
的源代码中)代表某种引用类型,但不代表某种原始类型。
这就是为什么在尝试将Object
实例数组转换为基元数组时会出现编译时错误的原因。
如果你这样做(例如)
Object[] arr = new Object[10];
Integer[] arr1 = (Integer[]) new Object[arr.length];
错误将消失。
int
不是Object
,但它是原始的。
使用Integer
,它会工作。
Object[] arr = new Object[10];
Integer[] arr1 = (Integer[]) new Object[arr.length];
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.