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의 일부로 정의 되었습니까?
나는 http://cs.oswego.edu/pipermail/lambda-lib/2011-February/000068.html 에서 비슷한 것에 대해 이야기하는 자바 신을 찾았 지만 개인 메일 링 목록의 일부이며 직접 요청할 수 없습니다.
JDK 8에서 기본값을 사용하는 방법과 람다를 지원하도록 Collection 인터페이스를 확장하는 방법에 대한 자세한 내용은 https://oracleus.wingateweb.com/published/oracleus2011/sessions/25066/25066_Cho223662.pdf를 참조하십시오.