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