是否可以指定一个默认为null的注释?
我想要实现的是类似可选的注释属性.
例如
public @interface Foo {
Config value();
}
public @interface Config {
boolean ignoreUnknown() default false;
int steps() default 2;
}
Run Code Online (Sandbox Code Playgroud)
我想使用@Foo(没有指定值,所以它应该是某种可选的),我也希望能够写出这样的东西:
@Foo (
@Config(
ignoreUnknown = true,
steps = 10
)
)
Run Code Online (Sandbox Code Playgroud)
是否可以使用注释做这样的事情?
我不想做像这样的公共@interface Foo {
public @interface Foo {
boolean ignoreUnknown() default false;
int steps() default 2;
}
Run Code Online (Sandbox Code Playgroud)
因为我希望能够区分是否已设置属性(而不是它是否具有默认值).
描述它有点复杂,但我正在研究一个生成Java代码的Annotation Processor.但是在运行时我想设置一个应该用于所有@Foo的默认配置,除了那些使用@Config设置自己配置的人.
所以我想要的是这样的:
public @interface Foo {
Config value() default null;
}
Run Code Online (Sandbox Code Playgroud)
但据我所知,这是不可能的,对吧?有没有人知道这种可选属性的解决方法?
Sot*_*lis 24
不,您不能null用于注释属性值.但是,您可以使用数组类型并提供空数组.
public @interface Foo {
Config[] value();
}
...
@Foo(value = {})
Run Code Online (Sandbox Code Playgroud)
要么
public @interface Foo {
Config[] value() default {};
}
...
@Foo
Run Code Online (Sandbox Code Playgroud)