gpt4 book ai didi

Java/Eclipse : returning to List casted Map. 值()

转载 作者:行者123 更新时间:2023-12-01 07:56:47 25 4
gpt4 key购买 nike

我正在开发一个基于 Java 的 Web 应用程序,突然发现了一种我目前无法理解的行为。

假设我有以下代码:

...snip...
Map<Integer, Foo> map = new HashMap<Integer, Foo>();
...snip...

public List<Foo> getFoos() {
return (List<Foo>)map.values();
}

我知道你需要实例化一个新的列表,例如 new ArrayList() ,但我想知道为什么 eclipse 没有给我警告。

只有在运行代码时我才会得到 ClassCastException。我很确定这不是 Eclipse 的错误,因为编译器对此代码也没有问题,但有人能解释一下为什么运行此代码时总是出现错误,但 IDE 和编译器不会提示吗?

最佳答案

IDE 和编译器都只在语法级别进行检查。在语法层面上,一切都很好。由于强制转换,getFoos() 结果的类型是有效的 List 类型,其他一切都很好。这实际上是语义上的错误。在语义层面上,您尝试将 map.values() 的结果强制转换为 List,该结果实际上会返回直接从 AbstractCollection 派生的 HashMap 内部类型的实例。由于这不是有效的转换(List 不是 map.values() 结果的父类(super class)型),java 将在运行时抛出 ClassCastException。

关于Java/Eclipse : returning to List casted Map. 值(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29095996/

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