注释默认为"null"值

soc*_*qwe 13 java annotations

是否可以指定一个默认为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)

  • @sockeqwe就像设置一个“默认{}”一样简单。 (2认同)

小智 6

尝试一下:

Config value() default @Config();
Run Code Online (Sandbox Code Playgroud)