2010-01-20 13 views
38

मैं कक्षा एनोटेशन के उद्देश्य को समझता हूं, How and where are Annotations used in Java? के लिए धन्यवाद। पैकेज एनोटेशन का उद्देश्य क्या है, जैसा कि in this blog post और §7.4.1 of the Java Language Specification वर्णित है?पैकेज एनोटेशन का क्या मतलब है?

आप मेटाडेटा को पैकेज के साथ क्यों जोड़ना चाहते हैं? आप किस तरह की चीजें कर सकते हैं?

उत्तर

40
  1. bnd tool (और Maven गठरी-प्लगइन) पैकेज टिप्पणियों का उपयोग करता है। @Version और पैकेज-info.java में @ एक्सपोर्ट एनोटेशन डालने से यह ओएसजीआई मेटाडेटा उत्पन्न करने की अनुमति देता है।
  2. javadoc पैकेज एनोटेशन का उपयोग करता है।
  3. जेएक्सबी एक्सएमएल स्कीमा प्रकार पैकेज-व्यापी में जावा प्रकार के मानचित्रण को निर्दिष्ट करने के लिए पैकेज-स्तरीय एनोटेशन, for example का उपयोग करता है। जेबॉस के एक्सएमएल बाध्यकारी में पैकेज एनोटेशन का भी उपयोग किया जाता है।
  4. स्ट्रूट 2 कन्वेंशन प्लगइन पैकेज में सभी कार्यों के लिए एक डिफ़ॉल्ट इंटरसेप्टर निर्दिष्ट करने के लिए an annotation का उपयोग करता है।
  5. कुछ पैकेज-स्तर Hibernate Annotations हैं। उन एनोटेशन के उपयोग का एक उदाहरण here पाया जा सकता है।
7

मुझे लगता है कि @Deprecated समझ में आएगा। और हो सकता है कि कुछ @Generated जैसे कुछ पैकेज गैर-जावा स्रोत से कुछ टूल द्वारा उत्पन्न किया गया हो। या @Internal यदि यह पैकेज सार्वजनिक API का हिस्सा नहीं है।

शायद ओएसजीआई उपकरण (जहां आपको अपने पैकेज के संस्करण घोषित करने की आवश्यकता है, और जिन पैकेजों पर आप निर्भर हैं) भी इसका उपयोग कर सकते हैं।

क्या किसी ने जंगली में देखा है?

4

दो कारण है कि मैं के बारे में सोच सकते हैं:

  • विशेष पैकेज टिप्पणी करना कुछ पहलुओं विशिष्ट कार्यक्षमता के लिए उन में कक्षाएं बुनना (AspectJ का उपयोग कर उदाहरण के लिए) जाने के लिए।
  • कुछ उपकरणों को पढ़ने के लिए कुछ पैकेजों को एनोटेट करना, उदाहरण के लिए स्रोत, मेटा-डेटा या अन्य प्रकार की संसाधन निर्माण के लिए।
+0

आप कह रहे हैं कि एक पैकेज व्याख्या है कि भीतर सभी वर्गों व्याख्या के बराबर है एक झुकाव में पैकेज? – Gili

+0

नहीं, मेरा मतलब है कि आप इसका उपयोग यह इंगित करने के लिए कर सकते हैं कि उस पैकेज में पूरी कक्षाओं को बुनाया जाना चाहिए। –

+0

मैंने जो लिखा उससे अलग कैसे है? – Gili

1

यह वास्तविक उद्देश्य नहीं है, लेकिन मैं पैकेज-info.java फ़ाइलों के पुनर्मूल्यांकन से बचने के लिए उन्हें एक समाधान के रूप में उपयोग कर रहा हूं।

समस्या अगर वहाँ केवल प्रलेखन (अपने अस्तित्व के लिए कारण) और package bla; बयान है कि javac (और चींटी कार्य <javac>) package-info.java के लिए कोई वर्ग फ़ाइल बनाता है, और कहा कि चींटी कार्य recompiles है प्रत्येक फ़ाइल जिसके लिए कोई (या पुराना) संबंधित .class फ़ाइल नहीं है।

वहां एक डमी एनोटेशन जोड़ना (जैसे SuppressWarnings) का प्रभाव था कि package-info.class का उत्पादन होता है और इस प्रकार फ़ाइल को फिर से बदला नहीं जाता है।

(चींटी 1.8.0 एक खाली पैकेज-info.class बनाने के द्वारा इस हल, भले ही कोई एनोटेशन था, लेकिन मैं यहाँ एक पुराने ant उपयोग कर रहा हूँ।)

2

उदाहरण के लिए JAXB की अनुमति देता है most annotations हैं कि आमतौर पर एक पैकेज पर समान रूप से लागू होने के लिए एक प्रकार पर उपयोग किया जाता है।उस मामले में अर्थ उस पैकेज में सभी वर्गों के लिए डिफ़ॉल्ट निर्दिष्ट करना होगा।

उदाहरण के लिए, यदि आप एक पैकेज में सभी वर्गों गेटर/setters के माध्यम से संपर्क में हैं कि के सभी गुण XML में मैप किया जा करना चाहते हैं तो आप @XmlAccessorType(XMLAccessType.PROPERTY) प्रत्येक वर्ग पर निर्दिष्ट कर सकते हैं या बस पैकेज पर यह निर्दिष्ट करें।

0

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

ऐसा ही एक तर्क चीजों में से एक ही प्रकार के चारों ओर सामान्यीकृत कोड मेटाडाटा के लिए बनाया जा सकता है: सुविधाओं, स्वामित्व, दोष, ऐतिहासिक जानकारी, आदि

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