java - 尽管类型相同,但我收到了一个 ClassCastException 事件。为什么?

标签 java class exception casting

我对 Java 不是太陌生,虽然我以前从未真正使用过 Set, 所以有人可以帮我吗?

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

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

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

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

那我该怎么办,我需要投这个。

最佳答案

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

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

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

关于java - 尽管类型相同,但我收到了一个 ClassCastException 事件。为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8390860/

相关文章:

Java并发查询

java - setText()、setSelectedItem()、getValueAt() 和 getSelectedRow() 不起作用

java - 我如何测试是否抛出了 ClassNotFoundException?

c++ - 编译器错误 : No appropriate default constructor avaible

javascript - 我如何应对网络存储的大小限制?

Java InputMismatchException 与 Scanner 循环

Java编程作业

class - Swift的实例方法和类型方法的区别

html - 我需要为此创建额外的 CSS 类吗?

java - Java 应用程序中的 PKIX 路径构建失败