Tôi vừa gặp một hành vi mà trước tiên tôi nghĩ đó là một lỗi trong Eclipse. Xem xét lớp đơn giản này:Tại sao lớp của tôi không thể triển khai giao diện được khai báo bên trong?
public class Foo {
public static interface Callback {
public void onAction();
}
}
Điều này hoàn toàn hợp lệ. Tuy nhiên, đây không phải là:
public class Foo implements Callback {
public static interface Callback {
public void onAction();
}
public void onAction() { /*some implementation*/ }
}
Nhưng điều này là hợp lệ, quá:
public class Foo {
public static interface Callback {
public void onAction();
}
private final Callback mCallback = new Callback() {
public void onAction() { /*some implementation*/ }
};
}
Tại sao Java buộc tôi phải loại 'chất thải' thành viên cho nó, nếu nó chỉ đơn giản có thể lưu nó bằng cách cho phép tôi thực hiện điều này? Tôi nhận thức được 'cách giải quyết' để đưa giao diện này vào trong tệp riêng của nó, nhưng không tò mò: Có lý do nào khiến nó không hoạt động?
AFAIK, bạn không thể làm mới trên giao diện, do đó, gọi lại mới() không hợp lệ –
Tôi không chắc chắn lý do chính thức cho việc này không hoạt động, nhưng tôi không thấy lý do nào bạn muốn một lớp thực hiện một giao diện mà nó chứa - tại sao bạn không chỉ định nghĩa lớp với các phương thức mà bạn đang cố gắng đưa vào giao diện? Tại sao bạn lại muốn có một giao diện trong trường hợp này? – iamnotmaynard
@MiguelPrz, anh ấy đang tạo một triển khai thực hiện giao diện nội tuyến bằng cách sử dụng '{}' – Miquel