加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 虽然类型相同但我得到的是ClassCastException事件.为什

发布时间:2020-12-15 08:45:52 所属栏目:Java 来源:网络整理
导读:我对 Java不太新,虽然我以前从未真正使用过Sets, 所以有人可以帮帮我吗? 我有以下问题; 但首先,这是我的代码: HashMapPosition[],String save = io.getSave();Position[][] saved_pos = (Position[][]) save.keySet().toArray(); 虽然在第二行,Java抛出了C
我对 Java不太新,虽然我以前从未真正使用过Sets,
所以有人可以帮帮我吗?

我有以下问题;
但首先,这是我的代码:

HashMap<Position[],String> save = io.getSave();

Position[][] saved_pos = (Position[][]) save.keySet().toArray();

虽然在第二行,Java抛出了ClassCastException,但为什么呢?
显然,save.keySet().toArray()返回的Array确实包含Position [] [] s,尽管遗憾的是,类Set中的toArray()只返回一个Object []数组.

那么我能做什么,我需要投这个.

解决方法

toArray()方法实际上并不知道它是在一组Position [] s上调用的;它只知道它是在一组上被调用的. (这是因为泛型如何在Java中实现;在运行时没有太多信息可用.)因此,它只返回一个完整的Partition [] s的Object [],而不是返回一个真正的Partition [] [] . (不同之处在于Object []可以包含任意对象 – 在调用之后,写入saved_pos [0] = new Object()会有效 – 而真正的Partition [] []会引发ArrayStoreException,如果你试过的话将其中一个元素设置为新的Object().)

幸运的是,有一个单独的toArray(…)方法可以使用,你可以告诉它你想要的数组类型,如下所示:

Position[][] saved_pos = save.keySet().toArray(new Position[0][]);

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读