Значение по умолчанию "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();