Обобщение Java: на переменную нестатического типа 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?

 Paul Bellora09 июн. 2012 г., 22:35
связанные с:stackoverflow.com/a/74400/697449
 auser09 июн. 2012 г., 20:45
@BheshGurung Да - намеренно.

Ответы на вопрос(2)

Решение Вопроса

public, static а такжеfinal.

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

Так какT фактически связан с экземпляром класса, если бы он был связан со статическим полем или методом, который связан с классом, тогда это не имело бы никакого смысла

 10 июн. 2012 г., 00:12
Я бы удалил первое предложение, поскольку оно ненужно и вводит в заблуждение - да, поля интерфейса неявноpublic static final но это связано с интерфейсомmethods которые неявноpublic abstract, Тот факт, что внутренние интерфейсы неявноstatic Сами это то, что важно.
 auser09 июн. 2012 г., 20:51
Спасибо, это отвечает на первую часть вопроса. Как сделать так, чтобы тип T, видимый во внутреннем интерфейсе, был того же типа, что и тип содержащего интерфейса?
 10 июн. 2012 г., 07:27
хорошо внутренний интерфейс такой же, как внутреннее поле

public interface A<T> {

     interface B<T> extends A<T>{

       T foo(); 
    }

}

Ваш ответ на вопрос