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

Ljava.lang.Object; 无法转换为[Ljava.lang.Integer

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

Ljava.lang.Object; 无法转换为[Ljava.lang.Integer

这是重现异常所需的最最少的代码。

class Stack<E> {    protected E[] elements = (E[])new Object[1];}class IntStack extends Stack<Integer> {    void push(Integer i) {        // subtly accessing elements as Integer[] which it's not        elements[0] = i;    }}

Java泛型使用类型擦除来实现,因此在编译后,此代码将转换为以下内容:

class Stack {    protected Object[] elements = new Object[1];}class IntStack extends Stack {    void push(Integer i) {        // throws ClassCastException        ((Integer[])elements)[0] = i;    }}

显然,a

new Object[]
不是
Integer[]
。请注意演员表如何移动到您未明确放置的位置。这就是为什么
(E[])newObject[size]
是一个 未经检查的铸造 和显示警告信息。

相反,

Object[]
只有在需要将元素返回到外部世界时,才应使用并执行未经检查的强制转换。

class Stack<E> {    private Object[] elements;    private int size;    Stack(int len) {        elements = new Object[len];    }    void push(E e) {        elements[size] = e;        size++;    }    E pop() {       @SuppressWarnings("unchecked");       E e = (E)elements[size - 1];       size--;       return e;    }}


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

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

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