JDK8中的一个新特性允许您在保持二进制兼容性的同时添加到现有接口。
语法就像
public interface SomeInterface() {
void existingInterface();
void newInterface() default SomeClass.defaultImplementation;
}
这样,当所有现有的 SomeInterface
实现升级到这个新版本时,它们不会突然在 newInterface()
附近出现编译错误。
虽然这是整洁的,但是当您实现两个接口时会发生什么,这两个接口都添加了一个新的默认方法,而您没有实现这个方法?让我用一个例子来解释。
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();
这已经被定义为 JDK 8的一部分了吗?
我发现 Java 之神在这里谈论类似的东西 http://cs.oswego.edu/pipermail/lambda-lib/2011-February/000068.html,但它的私人邮件列表的一部分,我不能直接问他们。
有关如何在 JDK 8中使用默认值以及扩展 Collection 接口以支持 lambdas 的更多细节,请参见: Https://oracleus.wingateweb.com/published/oracleus2011/sessions/25066/25066_cho223662.pdf