gpt4 book ai didi

java - 如何迭代通用 Map

转载 作者:太空宇宙 更新时间:2023-11-04 07:33:38 24 4
gpt4 key购买 nike

我想为包含通用映射的通用类创建一个clone()方法,但我一直在迭代映射的条目集。这是重要的部分:

private Map<Object, ObjectWrapper<E>> map = new ConcurrentHashMap<Object, ObjectWrapper<E>>();
for (Map.Entry<Object, ObjectWrapper<E>> entry: map.entrySet()){
....
}

编译器错误是这样的:

[ERROR] found   : java.util.Map.Entry<java.lang.Object,abc.ObjectWrapper<E>>
[ERROR] required: java.util.Map.Entry<java.lang.Object,abc.ObjectWrapper<E>>

对我来说看起来一样:)

我可以通过迭代键并检索循环内的值来完成这些工作,但我会遇到 Sonar 的麻烦。我尝试将 map.entrySet() 的结果转换为很多东西(例如类似主题中建议的 Set<? extends<Map.Entry<Object, ObjectWrapper<E>>>) ,但没有结果:(

编辑:问题在于在类和方法中使用通用参数。为了供将来引用,这是 SSCE(不起作用):

public class Test<E> {
private Map<Object, ObjectWrapper<E>> map = new ConcurrentHashMap<Object, ObjectWrapper<E>>();

public <E> Test<E> test(){
for (Map.Entry<Object, ObjectWrapper<E>> entry: map.entrySet()){
}
return null;
}

private static class ObjectWrapper<T>{
}

}

最佳答案

根据您的部分代码构建的以下代码适用于我的java版本1.6.0_24,没有任何错误

import java.lang.*;
import java.util.*;
import java.util.concurrent.*;

public class CMap<E>{
public CMap() {

}
public void test() {
Map<Object, List<E>> map = new ConcurrentHashMap<Object, List<E>>();
for (Map.Entry<Object, List<E>> entry: map.entrySet()){

}
}

public static void main(String[] args) {
CMap<Integer> cMap = new CMap<Integer>();
cMap.test();
}
}

其编译和执行日志:

$ javac CMap.java
$ java CMap

关于java - 如何迭代通用 Map,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17326531/

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