2014-07-10 13 views
10

क्या डिफ़ॉल्ट रूप से शून्य के साथ एनोटेशन निर्दिष्ट करना संभव है?एनोटेशन डिफ़ॉल्ट "शून्य" मान

जो मैं प्राप्त करना चाहता हूं वह वैकल्पिक एनोटेशन विशेषताओं की तरह कुछ है।

उदाहरण के लिए

public @interface Foo { 

    Config value(); 

} 


public @interface Config { 

    boolean ignoreUnknown() default false; 
    int steps() default 2; 
} 

मैं @Foo उपयोग करना चाहते हैं (मूल्य निर्धारित किए बिना, तो यह वैकल्पिक किसी तरह का होना चाहिए) और मैं भी कुछ इस तरह लिखने में सक्षम होना चाहते हैं:

@Foo (
    @Config(
     ignoreUnknown = true, 
     steps = 10 
    ) 
) 

क्या एनोटेशन के साथ ऐसा कुछ करना संभव है?

मैं इस सार्वजनिक @interface फू {तरह कुछ करने के लिए नहीं करना चाहती

boolean ignoreUnknown() default false; 
    int steps() default 2; 
} 

क्योंकि मैं अगर एक गुण सेट किया गया है या नहीं (और नहीं करता है, तो यह है भेद करने में सक्षम होना चाहता हूँ डिफ़ॉल्ट मान या नहीं)।

यह वर्णन करने के लिए थोड़ा जटिल है, लेकिन मैं जावा एनोटेशन प्रोसेसर पर काम कर रहा हूं जो जावा कोड उत्पन्न करता है। हालांकि रनटाइम पर मैं एक डिफ़ॉल्ट कॉन्फ़िगरेशन सेट करना चाहता हूं जिसका उपयोग सभी @Foo के लिए किया जाना चाहिए, सिवाय इसके कि जिन्होंने @ कॉन्फिग के साथ अपनी कॉन्फ़िगरेशन सेट की है।

तो कुछ इस तरह है कि मैं क्या चाहते हैं:

public @interface Foo { 

     Config value() default null; 

} 

लेकिन जहाँ तक मैं अपनी संभव नहीं पता है, अधिकार के रूप में? क्या कोई ऐसी वैकल्पिक विशेषता के लिए कामकाज जानता है?

+0

की संभावित डुप्लिकेट ([त्रुटि एक एनोटेशन के क्षेत्र के लिए एक डिफ़ॉल्ट शून्य मान की स्थापना] http://stackoverflow.com/questions/1178104/error-setting-a-default- null-value-for-an-annotations-field) – fracz

उत्तर

16

नहीं, आप एनोटेशन विशेषता मान के लिए null का उपयोग नहीं कर सकते हैं। हालांकि आप एक सरणी प्रकार का उपयोग कर सकते हैं और एक खाली सरणी प्रदान कर सकते हैं।

public @interface Foo { 
    Config[] value(); 
} 
... 
@Foo(value = {}) 

या

public @interface Foo { 
    Config[] value() default {}; 
} 
... 
@Foo 
+0

हां, लेकिन मुझे हमेशा '@Foo (value = {})' लिखना है और 90% उपयोग में मैं एक और कॉन्फ़िगरेशन प्रदान नहीं करना चाहता, इसलिए मैं जैसे कि '@ Foo' – sockeqwe

+1

@sockeqwe होना चाहिए, यह' डिफ़ॉल्ट {} 'सेट करना जितना आसान है। –

+0

आह, ठीक है ... बढ़िया! धन्यवाद! मैं आपका जवाब 5 मिनट में स्वीकार करूंगा (स्टैक ओवरफ्लो का कहना है कि मुझे 5 मिनट तक इंतजार करना पड़ेगा जब तक कि मैं कोई जवाब स्वीकार नहीं कर सकता) – sockeqwe

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