2013-06-26 78 views
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>{ 
} 

}

+3

你可以創建一個[SSCCE(http://sscce.org/),所以我們可以看到錯誤的自己呢? – Jeffrey

+2

你還沒有宣佈過'E'或者有過什麼嗎? (注意迭代併發集合可能不會完全符合你的想法。) –

+1

在你的類和方法聲明中,你可能有'',後者隱藏了前者。 – assylias

回答

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 
+2

謝謝。問題已經解決了。在問題中查看評論和編輯。 – NeplatnyUdaj