1

我想为包含泛型映射的泛型类创建一个 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>{
}

}

4

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
于 2013-06-26T17:35:08.750 回答