gpt4 book ai didi

java - 奇怪的 java 类型行为

转载 作者:行者123 更新时间:2023-12-01 23:05:49 25 4
gpt4 key购买 nike

我在 Map.entrySet 的泛型类型中看到一些我不理解的行为。如果我迭代类型化映射,我会得到预期的类型,例如

HashMap<A,B> map = new HashMap<>();
for(Map.Entry<A,B> e: map.entrySet(){ ... }

但是,如果我有一个无类型映射,则条目集的迭代类型将被报告为对象:

HashMap map = new HashMap();
a) for (Map.Entry e: map.entrySet(){ ... } // this will fail, e is being reported as "Object"
b) for (Object o: map.entrySet(){ ... } // this is compilable.

我不应该能够获得如语句 a) 中那样的非类型化条目吗?如果我查看 jvm 中的 hashmap 实现,我会看到以下内容:

c) public Set<Map.Entry<K,V>> entrySet() { ...

此行为似乎暗示,由于第二个示例中未指定 K,V,因此省略了 c) 中设置内容的整个键入。任何人都可以阐明这一点吗?这是预期的行为吗?

最佳答案

entrySet方法返回 Set<K, V> 。但是,当您为 HashMap 使用原始类型时,该类型中的所有泛型都会进行类型删除,并且 entrySet方法只返回 Set 。迭代原始 Set将产生Object s。

关于java - 奇怪的 java 类型行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22766269/

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