2012-08-02 5 views
20

मैं कस्टम जावा एनोटेशन कैसे कर सकता हूं बिना किसी विशेषता वाले नाम कोष्ठक के अंदर?मैं जावा नामांकन जैसे @name ("ल्यूक") कैसे कर सकता हूं जिसमें बिना किसी विशेषता के ब्रांड्स हैं?

मुझे यह नहीं चाहिए: @annotation_name(att=valor)। मैं सिर्फ यानी सर्वलेट्स में की तरह चाहते हैं,:

@WebServlet("/main") 

उत्तर

18

value नामक एक विशेषता, फिर वह विशेषता नाम छोड़ा जा सकता है के साथ टिप्पणी परिभाषित करें:

@interface CustomAnnotation 
{ 
    String value(); 
} 

यह बहुत की तरह इस्तेमाल किया जा सकता है:

@CustomAnnotation("/main") 
// ... 
+0

संकलित करता है मत करो नहीं :(और ग्रहण में विशेषता –

+0

लापता कह एक त्रुटि फेंक लेकिन नहीं करता है: यही कारण है कि कहने के लिए है अभी तक काम करें :(@ लक्ष्य (ElementType.METHOD) @ पुनरावृत्ति (RetentionPolicy.RUNTIME) सार्वजनिक @interface { 01 प्राप्त करें\t स्ट्रिंग नाम(); \t } => @ गेट ("हाय") सार्वजनिक शून्य बीमाकर्ता() एक अपवाद –

+0

धन्यवाद! यह काम करता हैं! :) –

7

का हवाला देते हुए Annotations official documentation:

अगर वहाँ सिर्फ एक तत्व नामित है "value", तो नाम के रूप में छोड़ा जा सकता है:

@SuppressWarnings("unchecked") 
void myMethod() { } 

यह कैसे यह व्याख्या परिभाषित किया जाता है:

public @interface SuppressWarnings { 
    String[] value(); 
} 

के रूप में आप देख सकते हैं कि दस्तावेज़ीकरण पूरी तरह से सही नहीं है, अन्य विशेषताओं को भी अनुमति दी जाती है ("केवल एक तत्व"), WebServlet देखें - लेकिन value नामक एक का इलाज किया जाता है अलग ढंग से।

12

आप एक विशेषता नामित मूल्य निर्दिष्ट करें:

public @interface MyAnnotation { 

    String value(); 

} 

यह अगर वे डिफ़ॉल्ट मान होना ही विशेषता होने के लिए नहीं है:

public @interface MyAnnotation { 

    String value(); 
    int myInteger() default 0; 

} 

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

@MyAnnotation("foo") 
@MyAnnotation(value = "foo", myInteger = 1) 

काम करता है

लेकिन

@MyAnnotatino("foo", myInteger = 1) 

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

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