2010-02-16 5 views
1

은 내가 아래에 붙여 넣은 것 같은 형태의 코드 조각이 내 'TheCache'클래스에서내부 클래스의 일반적인 가시성?

import java.util.LinkedHashMap; 
import java.util.Map; 

public class GenericMagic { 
    GenericMagic() { 
    } 


    private class Container { 
    int doSomething(){ return 42;} 

    @Override 
    public String toString() { 
     return "Container"+doSomething(); 
    } 
    } 

    private class TheCache<String, Container> extends LinkedHashMap<String, Container> { 
    @Override 
    protected boolean removeEldestEntry(Map.Entry<String, Container> eldest) { 
     Container value = eldest.getValue(); 
     value.doSomething();//if I comment this out it compiles 
     System.out.println(value); 
     return false; 
    } 
    } 
} 

를, 내가하면 괜찮 특정의 일반적인 유형을 제한 싶지만 '값'을 컨테이너로 가져 오면 doSomething 메소드를 실행할 수 없다는 점에서 어떻게 든 입력되지 않습니다. 왜? 그냥 클래스 선언에 <String, Container> 비트를 제거

+0

내가 그것을 게시하자마자 우리는 그것을 알아 냈다. TheCache에서 일반 정의를 다음과 같이 제거하면 개인 클래스 TheCache가 LinkedHashMap 를 확장하고 이 작동합니다. – Kylar

답변

3

:

private class TheCache extends LinkedHashMap<String, Container> { 

가 일반 타입 식별자 (일반적으로 "T") 인 것처럼 그것은 "문자열"과 "컨테이너"를 치료했다. 그래서 당신이 참조한 컨테이너가 당신의 중첩 된 클래스라는 것을 알지 못했습니다.

+1

그래, 나 자신을 알아 냈어 :/때때로 나는 내 자신의 이익을 위해 너무 영리하다. – Kylar

+0

그림을 그리는 것이 나쁘지 않습니다! :-) –

관련 문제