是否可以指定默认为空的注释?
我想要实现的是诸如可选注释属性之类的东西。
例如
public @interface Foo {
Config value();
}
public @interface Config {
boolean ignoreUnknown() default false;
int steps() default 2;
}
我想使用@Foo(不指定值,所以它应该是某种可选的),我也希望能够写这样的东西:
@Foo (
@Config(
ignoreUnknown = true,
steps = 10
)
)
可以用注释来做这样的事情吗?
我不想做这样的事
public @interface Foo {
boolean ignoreUnknown() default false;
int steps() default 2;
}
因为我希望能够区分属性是否已设置(以及是否具有默认值)。
描述起来有点复杂,但我正在开发一个生成 Java 代码的小型注释处理器。但是在运行时我想设置一个默认配置,该配置应该用于所有 @Foo,除了那些使用 @Config 设置自己的配置的人之外。所以我想要的是这样的:
public @interface Foo {
Config value() default null;
}
但据我所知这是不可能的,对吧?有人知道这种可选属性的解决方法吗?
null
作为注释属性值。但是,您可以使用数组类型并提供一个空数组。
public @interface Foo {
Config[] value();
}
...
@Foo(value = {})
或
public @interface Foo {
Config[] value() default {};
}
...
@Foo
Config value() default @Config();
在 Java 中,注释属性值不能是
null
,因为JLS 定义注释属性必须具有一个在编译时已知的常量值。因此,注释属性可能是:
1
、
"Hello"
、
Month.JULY
等)
@Config
)
{1, 2, 3}
)
null
null
被语言开发人员以某种方式明确排除为注释值,它只是在编译时不被认为是已知的:)