2017-02-05 7 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 
    } 

로 업 캐스팅 수없는 이유는 무엇입니까?자바는 인터페이스

+2

'KeyItr'에서''을 제거하면, 둘러싸는 클래스의'k'가 숨겨집니다. –

답변

0

게시 한 코드 조각은 컴파일되지 않습니다. 사용하는 제네릭이 적절하지 않습니다. EntryItr 클래스는 EntryItr<K, V>으로 선언되어야합니다. 또한 KeyItritr 필드에 알 수없는 일반 값 V이 있습니다. 이 값을 Object으로 변경하거나 KeyItr의 일반 서명 (예 : KeyItr)

에 추가해야합니다.이 변경 후에는 itr = new EntryItr<>();으로 지정해야합니다.

여기 다이아몬드 연산자는 EntryItrKeyItritr과 동일한 제네릭 서명을 갖게됨을 나타냅니다.