Подтвердить что ты не робот

Как я могу сделать аннотацию Java как @name ("Luke") без атрибута в круглых скобках?

Как я могу сделать пользовательскую аннотацию Java без имени атрибута в скобках?

Я не хочу этого: @annotation_name(att=valor). Я просто хочу, как в сервлетах, т.е.

@WebServlet("/main")
4b9b3361

Ответ 1

Определите аннотацию с атрибутом с именем value, тогда имя атрибута можно пропустить:

@interface CustomAnnotation
{
    String value();
}

Это можно использовать так:

@CustomAnnotation("/main")
// ...

Ответ 2

Вы указываете атрибут с именем 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)

не

Ответ 3

Цитирование аннотаций официальной документации:

Если есть только один элемент с именем value, то имя может быть опущено, как в:

@SuppressWarnings("unchecked")
void myMethod() { }

Вот как эта аннотация определяется:

public @interface SuppressWarnings {
  String[] value();
}

Как вы можете видеть, документация не совсем WebServlet, другие атрибуты также разрешены ("только один элемент"), см. WebServlet - но одно именованное value обрабатывается по-разному.