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-Febdays/000068.html , लेकिन इसका निजी मेलिंग सूची का हिस्सा है और मैं उनसे सीधे नहीं पूछ सकता।
इस बारे में अधिक जानकारी के लिए देखें कि चूक को JDK 8 में कैसे इस्तेमाल किया जा रहा है और लैम्ब्डा का समर्थन करने के लिए संग्रह इंटरफ़ेस का विस्तार किया जा रहा है: https://oracleus.wingateweb.com/published/oracleus2011/session/25066/25066_Cho223662.pdf