मुझे पता है कि आप क्या कह रहे हैं।
उदाहरण के लिए
मैं, एक इंटरफेस (जो मैं ExecutableList बोल रहा हूँ) USER_FRIENDLY_NAME
public interface ExecutableList<T extends ExecutableList<T,E>,E> //This is type parameter
extends List<E>, //self referencing. Trust
Comparable<E>, //me, it has its uses.
{
/** This would declare a constant but leave it to sub-interfaces/classes to define it. */
abstract String USER_FRIENDLY_NAME;
//Define the rest of your interface
}
दुर्भाग्य नामक एक contant स्ट्रिंग फ़ील्ड है करना चाहते हैं, यह जावा में संभव नहीं है। जब आप जावा इंटरफ़ेस में कोई फ़ील्ड घोषित करते हैं, तो यह संशोधक संशोधक public
, static
, और final
का तात्पर्य है।जावा प्रोग्रामिंग भाषा में भविष्य में बदलाव abstract
को जोड़ने के लिए अनुमति देता है, इस प्रकार निहित संशोधक public abstract static final String USER_FRIENDLY_NAME;
बनाते हैं, लेकिन जब आप इसके लिए नियमों को स्पष्ट रूप से परिभाषित कर सकते हैं, तो abstract
शब्द का उपयोग भ्रमित हो जाएगा, क्योंकि abstract
और final
को आम तौर पर समझा जाता है विपरीत अर्थ परिभाषित करें।
मैं अपनी उंगलियों को पार कर रहा हूं कि जावा का भविष्य संस्करण इसे कार्यान्वित करेगा। मैंने सुना है कि जावा 9 में निजी इंटरफ़ेस विधियों को जोड़ा जाएगा (डिफ़ॉल्ट विधियों के बीच उपयोग के लिए) लेकिन भाषा के अलावा इस शब्द पर अभी तक कोई शब्द नहीं है। पहले विचार करने के लिए कई पिछड़ा संगतता मुद्दों होंगे, मुझे यकीन है। यदि ओरेकल के किसी भी व्यक्ति ने इसे पढ़ा है, तो कृपया हमें इंटरफेस में डिस्काउंट कॉन्स्टेंट्स दें और इन्हें क्लैस/इंटरफेस को परिभाषित करें !!!
इस बीच, आपका एकमात्र विकल्प आपके इंटरफेस या अमूर्त वर्ग में String getUserFriendlyName();
विधि को परिभाषित करना है। सुरुचिपूर्ण और शायद उतना ही प्रभावशाली नहीं है, लेकिन आपके पास वर्तमान में कोई अन्य विकल्प नहीं है।
शायद यह ध्यान देने योग्य है कि संभावित रूप से अलग-अलग मूल्यों के साथ निरंतर स्थिर नहीं है! तो पीटर्स के जवाब के साथ जाओ। – TedTrippin