栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

ArrayList.toArray()中的Java泛型

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

ArrayList.toArray()中的Java泛型

如果你看一下执行

toArray(T[] a)
的的ArrayList

类,它是这样的:

public <T> T[] toArray(T[] a) {    if (a.length < size)        // Make a new array of a's runtime type, but my contents:        return (T[]) Arrays.copyOf(elementData, size, a.getClass());    System.arraycopy(elementData, 0, a, 0, size);    if (a.length > size)        a[size] = null;    return a;}

这种方法的问题是您需要传递相同泛型的数组。现在考虑如果此方法不带任何参数,则实现将类似于以下内容:

public <T> T[] toArray() {    T[] t = new T[size]; // compilation error    return Arrays.copyOf(elementData, size, t.getClass());}

但是这里的问题是, 您不能在Java中创建通用数组, 因为编译器不知道确切

T
代表什么。换句话说 在Java中不允许
创建非可校正类型的数组
(JLS§4.7)。


数组存储异常
(JLS§10.5)中的另一个重要报价:

如果数组的组件类型不可修改(第4.7节),则Java虚拟机将无法执行上一段所述的存储检查。
这就是为什么禁止使用不可修改元素类型的数组创建表达式的原因(第15.10.1节)。

这就是Java提供重载版本的原因

toArray(T[]a)

我将重写toArray()方法以告诉它它将返回E数组。

因此

toArray()
,您应该使用而不是覆盖
toArray(T[] a)

无法从Java
Doc
创建类型参数的实例可能对您也很有趣。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/410584.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号