Một tính năng mới sắp có trong JDK 8 cho phép bạn thêm vào giao diện hiện có mà vẫn duy trì khả năng tương thích nhị phân.
Cú pháp giống như
public interface SomeInterface() {
void existingInterface();
void newInterface() default SomeClass.defaultImplementation;
}
Bằng cách này cho tất cả các triển khai hiện có SomeInterface
khi họ nâng cấp lên phiên bản mới này, chúng không đột nhiên có lỗi biên dịch xung quanh newInterface()
.
Mặc dù điều này rất gọn gàng, nhưng điều gì sẽ xảy ra khi bạn đang triển khai hai giao diện mà cả hai đều đã thêm một phương thức mặc định mới mà bạn không triển khai? Hãy để tôi giải thích bằng một ví dụ.
public interface Attendance {
boolean present() default DefaultAttendance.present;
}
public interface Timeline {
boolean present() default DefaultTimeline.present;
}
public class TimeTravelingStudent implements Attendance, Timeline {
}
// which code gets called?
new TimeTravelingStudent().present();
Điều này đã được xác định là một phần của JDK 8 chưa?
Tôi thấy các vị thần Java đang nói về điều gì đó tương tự ở đây http://cs.oswego.edu/pipermail/lambda-lib/2011-Feb 02/000068.html , nhưng nó là một phần của danh sách gửi thư riêng và tôi không thể hỏi họ trực tiếp.
Xem phần này để biết thêm chi tiết về cách các mặc định sẽ được sử dụng trong JDK 8 và mở rộng giao diện Bộ sưu tập để hỗ trợ lambdas: https://oracleus.wingateweb.com/published/oracleus2011/sessions/25066/25066_Cho223662.pdf