有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何迭代泛型映射

我想为包含泛型映射的泛型类创建一个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上遇到麻烦。 我已经试过了地图的效果。entrySet()指向许多内容(如类似主题中建议的^{),但没有结果:(

编辑: 问题是在类和方法中都使用泛型参数。 以下是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>{
}

}


共 (1) 个答案

  1. # 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