जावा 8 के साथ शुरू, default
विधियों को इंटरफेस में पेश किया गया था। प्रभावी रूप से, इसका मतलब है कि सभी तरीके एक में नहीं interface
हैं abstract
।
जावा 9 (शायद) के साथ शुरू, private
विधियों की अनुमति होगी। इसका मतलब है कि सभी तरीके एक नहीं interface
हैं public abstract
।
सवाल "क्या जावा इंटरफ़ेस में तरीकों को public
एक्सेस संशोधक के साथ या बिना घोषित किया जाना चाहिए ?" स्टैक ओवरफ्लो में /programming/161633/should-methods-in-a-java-interface-be-declared-with-or-without-a-public-access-m पर पूछा गया था
वहाँ, अधिकांश उत्तरों ने तर्क दिया कि public abstract
इसका उपयोग नहीं किया जाना चाहिए क्योंकि कैन में कोई भी विधि interface
इसके अलावा और कुछ नहीं हो सकती है public abstract
। अब यह मामला नहीं है।
तो, इंटरफेस की इन नई विशेषताओं के प्रकाश में, क्या public abstract
जावा इंटरफेस विधि घोषणा में कीवर्ड का उपयोग किया जाना चाहिए ?
मेरे विशिष्ट वातावरण में, हमारे पास ऐसे लोग होंगे जो अनुभवी सॉफ्टवेयर इंजीनियर हैं, लेकिन जावा में अनुभवी नहीं हैं, समय-समय पर जावा कोड पढ़ते हैं। मुझे लगता है कि public abstract
कीवर्ड छोड़ने से अब उन लोगों के लिए भ्रम का एक अतिरिक्त बिंदु बन जाएगा, जो इन कीवर्ड के उपयोग के लिए अलग-अलग नियम होने के इतिहास से परिचित नहीं हैं।
abstract
होने की स्थिति तेजी से जटिल होती जा रही है। जावा 9 में, कि एक ही वाक्य हो सकता है, "एक इंटरफेस विधि एक कमी default
संशोधक या एक static
संशोधक या एक private
आपरिवर्तक परोक्ष सार है ..." इसके अतिरिक्त, स्पष्ट रूप से कीवर्ड इस्तेमाल नहीं करने के लिए सहायक तर्क, अर्थात्, सभी इंटरफ़ेस तरीके हैं कि public abstract
, अब मूट हैं।
stream
करने के लिए java.util.Collection
, या Map.getOrDefault()
। वैकल्पिक एक नया उप-इंटरफ़ेस बनाना है, और सभी को नीचे की ओर लाना है, जैसे कि ग्राफिक्स 2 डी, और किसी को भी मज़ा नहीं आया!
default
संशोधक या एकstatic
संशोधक की कमी होती हैabstract
... यह अनुमति है, लेकिन शैली के रूप में हतोत्साहित करने केabstract
लिए, इस तरह की विधि घोषणा के लिए संशोधक को स्पष्ट रूप से निर्दिष्ट करें । " आप क्यों उम्मीद करते हैं कि चीजें बदलनी चाहिए?