2015-06-27 6 views
5

इस example में, टिप्पणी का प्रकार (@interface) नीचे:इंटरफ़ेस प्रकार पर एनोटेशन का उपयोग करने का क्या फायदा है?

@interface ClassPreamble { 
     String author(); 
     String date(); 
     int currentRevision() default 1; 
     String lastModified() default "N/A"; 
     String lastModifiedBy() default "N/A"; 
     // Note use of array 
     String[] reviewers(); 
    } 

interface प्रकार का संकलन किया जाता है:

interface annotationtype.ClassPreamble extends java.lang.annotation.Annotation{ 
    public abstract java.lang.String author(); 
    public abstract java.lang.String date(); 
    public abstract int currentRevision(); 
    public abstract java.lang.String lastModified(); 
    public abstract java.lang.String lastModifiedBy(); 
    public abstract java.lang.String[] reviewers(); 
} 

तो, टिप्पणी का प्रकार interface प्रकार का संकलन किया जा रहा है, क्रम से पहले।

जावा में, interface प्रकार पर एनोटेशन प्रकार (@interface) का उपयोग करने का क्या फायदा है?

उत्तर

6

इंटरफेस ऑब्जेक्ट मॉडलिंग के लिए एक तकनीक है, जो वस्तुओं को कई प्रकार से जुड़े व्यवहार (लेकिन राज्य नहीं) को लागू करने की अनुमति देती है।

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

हुड के तहत, एनोटेशन को सुविधा के मामले के रूप में बड़े पैमाने पर इंटरफेस के रूप में लागू किया जाता है, लेकिन समानता शायद यह समझने में मददगार से अधिक भ्रमित है कि वे क्या हैं।

+0

अनुवाद के संबंध में, एनम प्रकार 'अंतिम श्रेणी' के लिए संकलित करता है। लेकिन enum प्रकार वर्ग की तुलना में एक अलग उद्देश्य के लिए है। ऑब्जेक्ट मॉडलिंग के लिए 'क्लास' का उपयोग किया जाता है। क्या यह अच्छा सादृश्य है? – overexchange

+2

एनम प्रकार एक उदाहरण हैं जहां एक पैटर्न भाषा में खींचा गया था। यदि जावा में एनम कक्षाएं नहीं थीं, तो आप अभी भी एक पैटर्न पर कोडिंग करके सटीक प्रभाव प्राप्त कर सकते हैं - बस अधिक क्रियाशक्ति के साथ। वर्गों के लिए संकलित यह enums सुविधा का दुर्घटना नहीं है, क्योंकि "enum पैटर्न" मूल रूप से कक्षाओं द्वारा व्यक्त किया जाता है। टिप्पणियां मेरे लिए काफी अलग लगती हैं। –

+0

आपके बिंदु के लिए: "** इंटरफेस जो वस्तुओं को लागू करने की अनुमति देता है **"। क्या मैं फिर से बदल सकता हूं, "इंटरफेस वस्तुओं को परिधीय (गैर-कोर) व्यवहार लागू करने की अनुमति देता है"? संदर्भ से लिया गया ** आइटम -18: इंटरफेस मिश्रणों को परिभाषित करने के लिए आदर्श हैं **। उदाहरण के लिए: 'इंटरफ़ेस तुलनात्मक' की तुलना करें() 'व्यवहार। – overexchange

5

यदि आप मैन्युअल रूप से कंपाइलर स्वचालित रूप से करते हैं, तो आप एक एनोटेशन परिभाषित नहीं करेंगे। Oracle documentation के अनुसार,

एक अंतरफलक मैन्युअल [java.lang.annotation.Annotation] फैली कि एक एनोटेशन प्रकार को परिभाषित नहीं करता है।

इसलिए, @interface वाक्य में जावा में एनोटेशन को परिभाषित करने के लिए वाक्यविन्यास आवश्यक है।

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

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