2013-07-13 5 views
6

मैं जेडीके 7 के प्रलेखन के माध्यम से ब्राउज़ कर रहा था जब मैंने पैकेज java.lang.annotation पैकेज में @Target नामक एनोटेशन देखा। उस वर्ग के हैडरयह कैसे संभव है कि एक टिप्पणी खुद के लिए एक टिप्पणी हो सकती है?

@Documented 
@Retention(value=RUNTIME) 
@Target(value=ANNOTATION_TYPE) 
public @interface Target 

अब, @Target ही में एक टिप्पणी के रूप में प्रयोग किया जाता है। यह कैसे संभव है? @Target हेडर में घोषित होने से पहले भी प्रयोग किया जाता है। मैंने एनोटेशन के साथ यह कोशिश की, मैंने लिखा था, और यह भी काम करता था। क्या कोई यहां समझा सकता है कि क्या हो रहा है?

+2

यह क्यों संभव नहीं होगा? कंपाइलर शायद अपनी एनोटेशन को पार करने से पहले कक्षा को पार कर लेता है। ध्यान दें कि आप आत्म-संदर्भ कक्षाएं भी कर सकते हैं (उदाहरण के लिए नोड्स का एक रिकर्सिव पेड़, उदाहरण के लिए) –

+0

एनोटेशन कुछ भी नहीं करते हैं, आपको त्रुटियों को छोड़कर या प्रक्रिया के साथ कुछ नया नहीं छोड़ना चाहिए, इन्हें प्रतिबिंब में बहुत अधिक उपयोग किया जाता है एक सदस्य पर हस्ताक्षर :) –

उत्तर

3

JLS विशेष रूप से section 9.6 Annotation Types में यह, का अनुमान है:

एक एनोटेशन a (§9.7) एक एनोटेशन प्रकार घोषणा पर टिप्पणी के प्रकार T से मेल खाती है, और T एक (मेटा) एनोटेशन है m जो java.lang.annotation.Target से मेल खाता है, तो m में कोई तत्व होना चाहिए जिसका मान java.lang.annotation.ElementType.ANNOTATION_TYPE है, या एक तत्व w नली मान java.lang.annotation.ElementType.TYPE है, या एक संकलन-समय त्रुटि होती है।

धारा 9.6 या 9.7 का कोई अन्य भाग नहीं कहता है कि एनोटेशन घोषणा के लिए घोषित किए जाने वाले एनोटेशन घोषणा के लिए गैरकानूनी होने के बारे में कुछ भी अवैध है।

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