gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:32:33 24 4
gpt4 key购买 nike

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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com