2013-06-26 3 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>> 

Выглядит так же мне :)

Я могу делать вещи перебором ключей и извлеките значения внутри цикла, но я столкнулся с проблемой сонара. Я попытался литье результата map.entrySet() для многих вещей (как Set<? extends<Map.Entry<Object, ObjectWrapper<E>>>) как предложено в подобных темах, но без результатов :(

EDIT: Проблемы с использованием универсального параметра . как в классе и метод для дальнейшего использования, вот ВПЧЭ (не работает):

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