2012-05-11 13 views
14

के अंदर कक्षा लिखने का उपयोग क्या है, मुझे जावा फोरम में से एक में निम्न उदाहरण मिला।इंटरफ़ेस

interface employee{ 
    class Role{ 
      public String rollname; 
      public int roleId; 
      public Object person; 
    } 
    Role getRole(); 
    // other methods 
} 

मैंने उपरोक्त कोड स्निपेट निष्पादित किया है और यह सफलतापूर्वक संकलित है। जिसका अर्थ है कि हमारे पास एक इंटरफेस के अंदर एक कक्षा हो सकती है।

मेरा प्रश्न यह है कि इस तरह के वर्गों का उपयोग क्या है? क्या यह कोई डिजाइन पैटर्न है?

+2

भले ही यह संकलित हो, ऐसा कुछ भी नहीं करना चाहिए। – memo

+1

[इंटरफ़ेस के भीतर आंतरिक कक्षा] के संभावित डुप्लिकेट (http://stackoverflow.com/questions/2400828/inner-class-within-interface) – NPE

+4

@memo - मैं असहमत हूं। ऐसी स्थितियां हैं जहां यह करने के लिए सही बात है। –

उत्तर

9

यह कोड स्निपेट आपके प्रश्न का उत्तर पहले से ही दे रहा है। Role इंटरफ़ेस getRole() विधि में उपयोग किया जाता है। इंटरफ़ेस के डिजाइनर ने निर्णय लिया कि यह कक्षा इंटरफ़ेस के साथ इतनी कड़ी मेहनत कर रही है कि इंटरफ़ेस के लिए कक्षा कितनी महत्वपूर्ण है इस पर जोर देने के लिए उस इंटरफ़ेस के अंदर इसे परिभाषित करना उचित है।

यह कक्षा के लिए अर्थपूर्ण नामस्थान प्रदान करता है: employee.Role। हालांकि मैं पहली बार इस तरह के निर्माण को देखता हूं जबकि अन्य वर्गों के भीतर परिभाषित स्थिर वर्ग काफी आम हैं (ऊपर के समान उद्देश्यों के लिए)।

4

यहां उपयोग किसी भी आंतरिक वर्ग के समान है। यह वर्ग के दायरे को सीमित करता है जहां यह संबंधित है।

इस मामले में कार्यान्वयनकर्ता ने सोचा कि Role शीर्ष-स्तरीय वर्ग के रूप में फिट नहीं था, और इसे employee इंटरफ़ेस के अंदर रखा गया था। इसका कारण यह है कि Role का इरादा employee के साथ कसकर जोड़ा जाना है।

1

कक्षा इंटरफ़ेस का एक महत्वपूर्ण हिस्सा प्रदान करती है: getRole के लिए एक वापसी मूल्य। इसलिए इंटरफ़ेस के भीतर कक्षा को परिभाषित करना समझ में आता है।

यह बात इस तरह की (जैसे java.util में Map.Entry) के लिए एक इंटरफेस के भीतर एक इंटरफ़ेस परिभाषित करने के लिए, जब इंटरफ़ेस को लागू करने और अधिक लचीलापन अनुमति देने के लिए थोड़ा और अधिक सामान्य हो जाएगा, लेकिन आप वर्ग के रूप में अच्छी तरह से कर सकते हैं।

0

मैं कोड का ऐसा टुकड़ा नहीं लिखूंगा, लेकिन मुझे लगता है कि उपयोग कक्षा और इंटरफ़ेस के बीच निर्भरता पर जोर देना है।

इंटरफेस का उपयोग एपीआई को परिभाषित करने के लिए किया जाता है और इस मामले में, लेखक शायद यह कहना चाहता था कि "ये दोनों अलग नहीं रह सकते"।

उम्मीद है कि इससे मदद मिलती है।

1

अपने उदाहरण है, जो मैं नीचे तय कर दी है के साथ एक मामूली संकलन समस्या है:

public interface Employee { 
class Role{ 
     public String rollname; 
     public int roleId; 
     public Object person; 
    } 

Role getRole(); 
} 
तरफ से

, हाँ, यह संकलित करता है। इसका मतलब यह नहीं है कि ऐसा करना एक अच्छा विचार है। यह आपके Role वर्ग का नाम-अंतर का एक और तरीका है, लेकिन मुझे लगता है कि यह बदसूरत है।

0

मैं कोड का ऐसा टुकड़ा नहीं लिखूंगा, लेकिन मुझे लगता है कि उपयोग कक्षा और इंटरफ़ेस के बीच निर्भरता पर जोर देना है।

इंटरफेस का उपयोग एपीआई को परिभाषित करने के लिए किया जाता है और इस मामले में, लेखक शायद यह कहना चाहता था कि "ये दोनों अलग नहीं रह सकते"।

संबंधित मुद्दे