2012-06-09 2 views
11
interface A<T> { 

    interface B { 
     // Results in non-static type variable T cannot 
     // be referenced from a static context 
     T foo(); 
    } 

} 

어쨌든 이것을 반올림하고 있습니까? A.B에서 참조 할 때 T가 정적으로 보이는 이유는 무엇입니까?Java Generics : 정적이 아닌 유형의 변수 T는 정적 컨텍스트에서 참조 할 수 없습니다.

+0

@BheshGurung 예 - 의도적입니다. – auser

+0

관련 : http://stackoverflow.com/a/74400/697449 –

답변

7

인터페이스의 모든 구성원 필드는 기본적으로 public, staticfinal입니다.

기본적으로 내부 인터페이스가 static이므로 고정 필드 또는 메서드에서 T을 참조 할 수 없습니다. 이 다음은 어떤 의미

+1

감사합니다. 질문의 첫 번째 부분에 답변합니다. 내부 인터페이스에 표시되는 유형 T를 포함하는 인터페이스의 유형과 동일한 유형으로하려면 어떻게해야합니까? – auser

+2

필자는 불필요하고 오해의 소지가 있으므로 첫 번째 문장을 제거하겠다. 예 인터페이스 필드는 암시 적으로'public static final'이지만 이것은 암시 적으로'public abstract' 인 interface * methods *와 관련이있다. 내부 인터페이스가 암시 적으로 '정적'이라는 사실 자체가 중요합니다. –

+0

내부 인터페이스가 내부 필드와 동일합니다. –

1

을하지 않을 클래스와 연관된 정적 필드 나 메소드와 연관된 있다면 T 때문에

실제로, 클래스의 인스턴스와 연관되어 어떻게 이런 일에 대해.

public interface A<T> { 

    interface B<T> extends A<T>{ 

     T foo(); 
    } 

} 
관련 문제