注释默认“空”值

2022-09-02 03:18:51

是否可以指定默认值为 null 的批注?

我想实现的是类似于可选注释属性的东西。

例如

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;

 }

但据我所知,这是不可能的,对吧?有没有人知道这种可选属性的解决方法?


答案 1

不可以,不能用于注释属性值。但是,您可以使用数组类型并提供空数组。null

public @interface Foo {
    Config[] value();  
}
...
@Foo(value = {})

public @interface Foo {
    Config[] value() default {};  
}
...
@Foo

答案 2

试试看:

Config value() default @Config();

推荐