是否可以将空值作为默认值指定注解?
我想实现的是类似于可选注解属性的功能。
例如
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;
}
型
因为我希望能够区分一个属性是否被设置(而不是它是否有默认值)。
描述起来有点复杂,但我正在使用一个小的Annotation Processor来生成Java代码。然而,在运行时,我想设置一个默认配置,该配置应该用于所有@Foo,除了那些使用@Config设置自己配置的人。
所以我想要的是这样的
public @interface Foo {
Config value() default null;
}
型
但据我所知,这是不可能的,对吧?有人知道这样一个可选属性的变通方法吗?
3条答案
按热度按时间hgb9j2n61#
不能,你不能使用
null
作为注解属性值。但是你可以使用数组类型并提供一个空数组。字符串
或
型
dwbf0jvd2#
试试看:
字符串
bqucvtff3#
@Sotirios Delimanolis的答案是正确的,但我想解释为什么存在这种限制。
在Java中,annotation属性值不能是
null
,因为JLS定义annotation属性必须具有编译时已知的常量值 *。因此,annotation属性可能是:1.在编译时已知的常量表达式(如
1
、"Hello"
、Month.JULY
等)1.一个元素值对(afaik它就像其他注解
@Config
)1.数组初始化器(如
{1, 2, 3}
)正如你所看到的,
null
在编译时不被认为是已知的值。因此你有这个限制。所以并不是说null
被语言开发人员特别排除为注解值,它只是在编译时不被认为是已知的:)