Одночленные аннотации

Одночленная аннотация содержит, как должно быть понятно, только один член. Она работает подобно обычной аннотации за исключением того, что допускает сокращенную форму спецификации значения члена. Когда присутствует только один член, вы можете просто специфицировать его значение, когда аннотация применяется, вы не обязаны указывать имя члена. Однако для того, чтобы использовать это сокращение, член должен иметь имя value.

Ниже показан пример создания и использование одночленной аннотации.

import java.lang.annotation.*;
import java.lang.reflect.*; // Одночленная аннотация.
@Retention(RetentionPolicy.RUNTIME)
@interface MySingle {
int value О; // именем переменной должно быть value
}
class Single {
// Аннотирование метода одночленной аннотацией.
@MySingle(100)
public static void myMeth() {
Single ob = new Single ();
try {
Method m = ob.getClass().getMethod("myMeth");
MySingle anno = m.getAnnotation(MySingle.class);
System.out.println(anno.value()); // отображает 100
}
catch (NoSuchMethodException exc) {
System.out.println("Метод не найден.");
}
}
public static void main(String args[]) {
myMeth();
}
}

Как и ожидалось, эта программа отображает значение 100. Здесь @MySingle применяется для аннотирования myMeth (), как показано ниже:

@MySingle(100)

Обратите внимание, что value = не должно быть указано.

Вы можете применять синтаксис одночленных аннотаций и при использовании аннотаций с другими членами, но все остальные члены должны иметь значения по умолчанию. Например, ниже добавляется член xyz со значением по умолчанию, равным 0.

@interface SomeAnno {
int value О;
int xyz();
default 0;
}

В случаях, когда вы хотите использовать значение по умолчанию для xyz, вы можете применить SSomeAnno, как показано ниже, просто указав значение для value с использованием синтаксиса одночленных аннотаций:

SSomeAnno(88)

В этом случае xyz по умолчанию принимает значение 0, a value — 88. Конечно, чтобы специфицировать другое значение для xyz, необходимо, чтобы оба члена были инициированы явно:

@SomeAnno (value = 88, xyz = 99)

Помните, что когда вы применяете одночленные аннотации, именем члена должно быть value.