2009-02-25 10 views
41

मैंने अभी इस सुविधा की खोज की है।@interface जावा में डिफ़ॉल्ट घोषणा उपयोग

"@interface" वाक्यविन्यास का उपयोग करके एक इंटरफेस घोषित करने से आप एक डिफ़ॉल्ट मान डाल सकते हैं।

public @interface HelloWorld { 
    public String sayHello() default "hello world"; 
} 

यह मेरे लिए कुछ नया है। उस डिफ़ॉल्ट मान का उपयोग कैसे किया जाता है।

मैं, कि के लिए संदर्भ नहीं मिल सकता है क्योंकि www जावा इंटरफ़ेस दस्तावेजों से पहले जावा 1.5 में "@" इसके अलावा (.5 पर या .4 में था?)


संपादित से भरा हुआ है मुझे पता था कि मुझे लगता है कि दस्तावेज़ साल पहले पढ़े चाहिए पी

!!! ..:

जवाब के लिए धन्यवाद (मैं किसी भी तरह "एनोटेशन" के करीब है, के लिए मैं टैग पहले से ही उपयोग किया गया था) ले टी देखें ...

कई एपीआई को बॉयलरप्लेट कोड की उचित मात्रा की आवश्यकता होती है। के लिए ....

+2

और जावा 8 डिफ़ॉल्ट इंटरफ़ेस विधियों के साथ भ्रमित न होने के लिए: http://java.dzone.com/articles/interface-default-methods-java –

उत्तर

55

आपने अभी annotation लिखा है।

विशेष रूप से default कथन के संबंध में: इसका उपयोग इसलिए किया जाता है क्योंकि एनोटेशन और इंटरफेस में कन्स्ट्रक्टर नहीं हो सकते हैं, इसलिए एनोटेशन विशेषता के लिए डिफ़ॉल्ट मान रखने का यह एकमात्र तरीका है। Java Language Specification से:

एक एनोटेशन प्रकार तत्व के लिए एक डिफ़ॉल्ट मान निर्दिष्ट हो सकता है। यह कीवर्ड (123)कीवर्ड और तत्व के डिफ़ॉल्ट मान के साथ अपनी (खाली) पैरामीटर सूची का पालन करके किया जाता है।

एनोटेशन पढ़े जाने पर डिफ़ॉल्ट गतिशील रूप से लागू होते हैं; डिफ़ॉल्ट मान एनोटेशन में संकलित नहीं होते हैं। इस प्रकार, एक डिफ़ॉल्ट मान बदलना परिवर्तनों से पहले संकलित किए गए वर्गों में भी एनोटेशन को प्रभावित करता है (इन एनोटेशन को मानने से डिफ़ॉल्ट तत्व के लिए एक स्पष्ट मान नहीं है)।

मुझे लगता है कि java.lang.annotation में कोई भी एनोटेशन डिफ़ॉल्ट मानों का उपयोग नहीं करता है।


उपयोग: आप एक विशेषता sayHello भी एक टिप्पणी के @HelloWorld है। जब से तुम उनका डिफ़ॉल्ट मान एक भी तत्व के साथ,

@HelloWorld(sayHello="Hi") 
public class MyClass { 
} 

, तो आप सिर्फ

@HelloWorld 
public class MyClass { 
} 

डाल सकता है (ध्यान दें कि दस्तावेज़ कहते हैं, "एनोटेशन में: आप इसे एक वर्ग पर इस तरह डाल सकता है तत्व को value नाम दिया जाना चाहिए "; मेरा मानना ​​है कि ऐसा करने का एकमात्र कारण यह है कि आप पैरामीटर का नाम दिए बिना @HelloWorld("Hi") लिख सकते हैं।)

जैसा लिखा है, आपकी एनोटेशन किसी वैध प्रोग्राम तत्व (विधियों और परिवर्तनीय घोषणाओं सहित) पर उपयोग की जा सकती है। आप इसे @Target एनोटेशन के साथ बदल सकते हैं।

अंत में, RetentionPolicy सेट करने से आप यह तय कर सकते हैं कि एनोटेशन को वीएम द्वारा छोड़ा गया, या हमेशा रखा गया है या नहीं।


दो संकुल कि भी दिलचस्प हो सकता है: javax.annotation और javax.annotation.processing। और here स्रोत कोड विश्लेषण के लिए एनोटेशन प्रोसेसिंग का उपयोग करने का एक उदाहरण है।

+1

+1: धन्यवाद mmyers: क्या आपके पास इस आलसी के लिए कोई सारांश है प्रोग्रामर? – OscarRyz

+0

क्या सारांश? एनोटेशन के सभी उपयोग? –

+1

नहीं, केवल @interface उपयोग का ... मैं लिंक को देखूंगा ... बाद में: -/ – OscarRyz

4

यह annotation है आप एक इंटरफ़ेस घोषित नहीं कर रहे हैं। यह जावा 1.5 में जोड़ा गया था।

+0

+1। ओह .. हाँ, एनोटेशन। मुझे लगता है कि मैंने उन लोगों के लिए व्याख्यान को खारिज कर दिया जब मैंने कहा, "जब मुझे एनोटेशन प्रोसेसिंग टूल बनाने की ज़रूरत है तो मैं उस पर आउंगा" आज मैं ग्रोवी सोर्स कोड देख रहा था और यह पहली चीज थी जो मुझे पहेली बनाती थी। – OscarRyz

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