2017-02-05 20 views
-4
private class EntryItr implements Iterator<Map.Entry<K, V>> { 
... 
} 

private class KeyItr<K> implements Iterator<K> { 

    private Iterator<Map.Entry<K,V>> itr; 

    KeyItr(){ 
     itr=new EntryItr(); // CANNOT CREATE 
    } 

Почему не EntryItr базовому типу к ранее реализованный интерфейс?Java не к базовому типу интерфейса

+2

Удалите '' из 'KeyItr', он скрывает' k' входящего класса. –

ответ

0

Этот фрагмент кода, который вы отправили, даже не компилируется. Дженерики, которые вы использовали, не являются правильными: класс EntryItr должен быть объявлен как EntryItr<K, V>. Кроме того, в поле KeyItritr имеется нераспознанное общее значение типа V. Вы должны либо изменить его на Object, или добавить его в родовую подпись KeyItr «s, т.е. KeyItr

После этих изменений, назначение itr = new EntryItr<>(); должно быть возможным.

Обратите внимание на оператора алмаза здесь, чтобы обозначить, что EntryItr будет иметь такую ​​же подпись, как KeyItr's itr.