2014-07-10 106 views
10

是否可以指定一個默認值爲null的註釋?註釋默認「null」值

我想實現的是類似可選的註釋屬性。

例如

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; 
} 

,因爲我希望能夠,如果屬性已設置或沒有(如果它沒有區分缺省值)。

描述有些複雜,但我正在研究一個生成Java代碼的Annotation Processor。然而,在運行時,我想設置一個默認配置,應該用於所有@Foo,不包括那些使用@Config設置自己配置的配置。

,所以我想是這樣的:

public @interface Foo { 

     Config value() default null; 

} 

但據我所知它不可能,對吧?有沒有人知道這種可選屬性的解決方法?

+0

的可能的複製[錯誤設置的註釋的字段的默認空值](http://stackoverflow.com/questions/1178104/error-setting-a-default-註釋字段的空值) – 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這和設置'default {}'一樣簡單。 –

+0

啊,對...太好了!謝謝!我會在5分鐘內接受你的答案(Stackoverflow說,我必須等5分鐘,直到我可以接受答案) – sockeqwe