我对 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/