2013-09-07 3 views
0

Eclipse, жалуется этот код с «Вступление параметр типа скрывается тип Map.Entry»:Почему параметр параметра Entry скрывает тип Map.Entry?

import java.util.Map.Entry; 

public class Test { 
    static abstract class EntryIterator<Entry<K, V>> implements Iterator<K, V> { 
    } 
} 

Я не совсем понимаю, в чем проблема здесь - тип в вопросе являетсяjava.util.Map.Entry. Как может эта тень себя? Как я могу объявить внутренний класс, чтобы он скомпилировался?

+1

Eclipse должен жаловаться не только на то, что у вас там есть синтаксическая ошибка. – arshajii

+0

@arshajii Теперь, когда я закрыл вновь открытые окна. Он действительно показывал только это сообщение раньше. На самом деле у меня была эта проблема в течение многих лет, должно было сделать это раньше - Eclipse иногда даже продолжает показывать ошибку после того, как вы ее исправили до тех пор, пока исходное окно не будет закрыто :( – Durandal

ответ

4

Проблема эта часть декларации:

class EntryIterator<Entry<K, V>> 

Это пытается объявить тип параметр под названием Entry<K, V> (который не является допустимым). Затем вы говорите, что класс реализуетIterator<K, V>, что также недействительно, так как Iterator имеет только параметр одного типа.

Я подозреваю, что вы на самом деле означает:

class EntryIterator<K, V> implements Iterator<Entry<K, V>> 
+0

О, черт возьми, именно эта проблема. Возможно, это время для перерыва :) – Durandal

0

Я думаю, что вы имеете в виду

static abstract class EntryIterator<T extends Entry<?, ?>> implements Iterator<T> 

Это ставит Ограничить на родовом параметра Т EntryIterator таким образом, что она должна быть запись чего-то. Вы создаете экземпляр с

new EntryIteartor<Map.Entry<K, V>>(...); 
Смежные вопросы