"लैम्ब्डा अभिव्यक्तियों के लिए समर्थन जोड़ने के प्रयास के रूप में जावा एसई 8 में शामिल करने के लिए इंटरफेस में निजी तरीकों के लिए समर्थन संक्षेप में विचार किया गया था, लेकिन जावा एसई 8 के लिए उच्च प्राथमिकता कार्यों पर बेहतर ध्यान केंद्रित करने के लिए वापस ले लिया गया था। अब यह है प्रस्तावित किया गया है कि निजी इंटरफेस विधियों के लिए समर्थन किया जाएगा जिससे इंटरफेस के गैर अमूर्त तरीकों को उनके बीच कोड साझा करने में सक्षम बनाया जा सके। "निजी इंटरफ़ेस विधियां, उदाहरण उपयोग-केस?
तो http://openjdk.java.net/jeps/213 के लिए विनिर्देश कहता है और बग रिपोर्ट https://bugs.openjdk.java.net/browse/JDK-8071453 में बताता है।
लेकिन मैं वास्तव में किसी भी उपयोग-मामले के बारे में सोच नहीं सकता जहां यह आवश्यक है, यहां तक कि ऊपर दिए गए संक्षिप्त स्पष्टीकरण के साथ भी। क्या मैं एक उदाहरण मांग सकता हूं जहां कोड के संदर्भ में "निजी इंटरफ़ेस विधियां" उपयोगी हों?
संपादित करें: तो जवाब यह है कि के कारण कैसे डिफ़ॉल्ट कार्यान्वयन जावा 8 में इंटरफेस में जोड़ा गया है, कि ऐसे मामले जहां डिफ़ॉल्ट कार्यान्वयन एक ही codebase का उपयोग कर रहे हो सकता है।
उदाहरण के लिए,
public interface MyInterface {
default void initializeMyClass(MyClass myClass, Params params) {
//do magical things in 100 lines of code to initialize myClass for example
}
default MyClass createMyClass(Params params) {
MyClass myClass = new MyClass();
initializeMyClass(myClass, params);
return myClass;
}
default MyClass createMyClass() {
MyClass myClass = new MyClass();
initializeMyClass(myClass, null);
return myClass;
}
}
बेवकूफ उदाहरण के लिए, मुझे पता है। लेकिन मान लें कि हम दोनों तरीकों से initializeMyClass(Params)
का उपयोग करना चाहते हैं। हालांकि, अगर हम इसे इस तरह (डिफ़ॉल्ट विधि) करते हैं, तो initializeMyClass(Params)
सार्वजनिक इंटरफ़ेस का हिस्सा होगा! ऐसा होने से रोकने के लिए, हम केवल createMyClass()
डिफ़ॉल्ट विधियों के अंदर पूरे initializeMyClass(Params)
का कोड रख सकते हैं। जिसके परिणामस्वरूप कोड डुप्लिकेशन, जो अवांछनीय है।
इसलिए, यह रिफैक्टरिंग के साथ समस्या का कारण बनता है, और ऐसे कोड डुप्लिकेशन को हटाने के लिए, निजी डिफ़ॉल्ट विधियों की अनुमति है।
उत्तर देने के लिए धन्यवाद!
जावा 9 निजी इंटरफ़ेस विधियों का समर्थन करता है। – Nicolai
हाँ मुझे पता है, यह सवाल "उनके बारे में क्या बात है" के बारे में था, लेकिन यह डिफ़ॉल्ट तरीकों के कारण है। – EpicPandaForce