Ответ 1
Определите аннотацию с атрибутом с именем value
, тогда имя атрибута можно пропустить:
@interface CustomAnnotation
{
String value();
}
Это можно использовать так:
@CustomAnnotation("/main")
// ...
Как я могу сделать пользовательскую аннотацию Java без имени атрибута в скобках?
Я не хочу этого: @annotation_name(att=valor)
. Я просто хочу, как в сервлетах, т.е.
@WebServlet("/main")
Определите аннотацию с атрибутом с именем value
, тогда имя атрибута можно пропустить:
@interface CustomAnnotation
{
String value();
}
Это можно использовать так:
@CustomAnnotation("/main")
// ...
Вы указываете атрибут с именем value:
public @interface MyAnnotation {
String value();
}
Это не должно быть единственным атрибутом, если они имеют значения по умолчанию:
public @interface MyAnnotation {
String value();
int myInteger() default 0;
}
Но если вы хотите явно присвоить значение атрибуту, отличному от значения, вы должны явно присвоить значение. То есть:
@MyAnnotation("foo")
@MyAnnotation(value = "foo", myInteger = 1)
работы
но
@MyAnnotatino("foo", myInteger = 1)
не
Цитирование аннотаций официальной документации:
Если есть только один элемент с именем
value
, то имя может быть опущено, как в:
@SuppressWarnings("unchecked")
void myMethod() { }
Вот как эта аннотация определяется:
public @interface SuppressWarnings {
String[] value();
}
Как вы можете видеть, документация не совсем WebServlet
, другие атрибуты также разрешены ("только один элемент"), см. WebServlet
- но одно именованное value
обрабатывается по-разному.