繁体   English   中英

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

[英]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扩展的任何内容)转换为基本类型( intlongbooleanchar等)。

您也不能将像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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM