2014-07-10 87 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