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 に答える