Вопрос по generics, java – Обобщение Java: на переменную нестатического типа T нельзя ссылаться из статического контекста

14
interface A<T> {

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

}

Есть ли что-нибудь вокруг этого? Почему T рассматривается как статический при ссылке из A.B?

@BheshGurung Да - намеренно. auser
связанные с:stackoverflow.com/a/74400/697449 Paul Bellora

Ваш Ответ

2   ответа
6

public, static а такжеfinal.

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

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

Спасибо, это отвечает на первую часть вопроса. Как сделать так, чтобы тип T, видимый во внутреннем интерфейсе, был того же типа, что и тип содержащего интерфейса? auser
Я бы удалил первое предложение, поскольку оно ненужно и вводит в заблуждение - да, поля интерфейса неявноpublic static final но это связано с интерфейсомmethods которые неявноpublic abstract, Тот факт, что внутренние интерфейсы неявноstatic Сами это то, что важно.
хорошо внутренний интерфейс такой же, как внутреннее поле
3

public interface A<T> {

     interface B<T> extends A<T>{

       T foo(); 
    }

}

Похожие вопросы