Почему я не могу использовать generics во внутреннем интерфейсе?
Я попытался скомпилировать следующий код:
public interface Foo<T> {
public interface Bar {
public void bar(T t);
}
void foo(T t);
}
Но я получаю эту ошибку: "Foo.this нельзя ссылаться из статического контекста".
В частности, я получаю его на "T" в баре (T t). Однако foo (T t) не дает такой же ошибки. Я не понимаю, почему это статический контекст и что на самом деле означает ошибка.
Ответы
Ответ 1
"Вложенный" интерфейс (Bar в вашем примере) неявно статичен. Таким образом, он не может получить доступ к конкретной информации о конкретном объекте, относящейся к Foo, например, к ее родовому типу.
См. например JLS # 8.5.1:
Пользовательский интерфейс неявно статичен