Java Generics: переменная типа нестатического типа T не может ссылаться на статический контекст

interface A<T> {

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

}

Вокруг этого? Почему T рассматривается как статический при ссылке из A.B?

Ответы

Ответ 1

Поля всех полей интерфейса по умолчанию public, static и final.

Поскольку по умолчанию внутренний интерфейс static, вы не можете ссылаться на T на статические поля или методы.

Поскольку T фактически связан с экземпляром класса, если он был связан со статическим полем или методом, связанным с классом, то это не имело бы смысла

Ответ 2

Как насчет чего-то подобного.

public interface A<T> {

     interface B<T> extends A<T>{

       T foo(); 
    }

}