JDK 8中的一项新功能允许您在保留二进制兼容性的同时添加到现有接口。
语法就像
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接口以支持lambda的详细信息,请参见以下内容:https : //oracleus.wingateweb.com/published/oracleus2011/sessions/25066/25066_Cho223662.pdf