Я только что столкнулся с поведением, которое я сначала подумал, что это ошибка в Eclipse. Рассмотрим этот простой класс:Почему мой класс не реализует интерфейс, объявленный внутри него?
public class Foo {
public static interface Callback {
public void onAction();
}
}
Это совершенно верно. Однако это не так:
public class Foo implements Callback {
public static interface Callback {
public void onAction();
}
public void onAction() { /*some implementation*/ }
}
Но это справедливо, тоже:
public class Foo {
public static interface Callback {
public void onAction();
}
private final Callback mCallback = new Callback() {
public void onAction() { /*some implementation*/ }
};
}
Почему Java заставить меня своего рода «отходов» члена для него, если он может просто сохранить его позволив мне реализовать это сам? Я хорошо знаю об «обходном пути», чтобы поместить этот интерфейс в свой собственный файл, но из любопытства: есть ли причина, почему это не сработает?
AFAIK, вы не можете создать новый интерфейс, поэтому новый Callback() недействителен –
Я не уверен в официальном обосновании того, что это не работает, но я не вижу причин, почему вы хотели бы иметь класс реализует интерфейс, который он содержит - почему бы вам просто не определить класс с помощью методов, которые вы пытаетесь ввести в интерфейс? Зачем вам вообще нужен интерфейс? – iamnotmaynard
@MiguelPrz он создает реализацию интерфейса inline с помощью '{}' – Miquel