Java 注释默认值";空";价值

Java 注释默认值";空";价值,java,annotations,Java,Annotations,是否可以指定默认为null的注释 我想要实现的是类似于可选注释属性的功能 比如说 public @interface Foo { Config value(); } public @interface Config { boolean ignoreUnknown() default false; int steps() default 2; } 我希望使用@Foo(不指定值,因此它应该是某种可选的),我还希望能够编写如下内容: @Foo ( @Conf

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

 }

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

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

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

试试看:

Config value() default @Config();

是的,但是我总是要写
@Foo(value={})
,在90%的使用中,我不想提供另一个配置,所以我只希望有
@Foo
@sockeqwe,这很容易,只要设置一个
默认值{}
。可能的重复
Config value() default @Config();