我想为包含通用映射的泛型类创建一个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>{
}
}
答案 0 :(得分:1)
从部分代码构建的以下代码适用于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