Получение всех аннотаций


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

Annotation[] getAnnotations()

Он возвращает массив аннотаций. getAnnotations () может быть вызван для объектов типа Class, Method, Constructor и Field.

Вот еще один пример с рефлексией, который показывает, как получить все аннотации, ассоциированные с классом и методом. Он объявляет две аннотации. Затем он использует их для аннотирования класса и метода.

// Показать все аннотации для класса и метода.
import java.lang.annotation.*;
import java.lang.reflect.*;
@Retention(RetentionPolicy.RUNTIME)
@interface MyAnno {
String str ();
int val();
}
@Retention(RetentionPolicy.RUNTIME) Sinterface What {
String description();
}
SWhat(description = "Аннотация тестового класса")
@MyAnno(str = "Meta2", val = 99)
class Meta2 {
SWhat(description = "Аннотация тестового метода")
@MyAnno(str = "Testing", val = 100)
public static void myMeth() {
Meta2 ob = new Meta2 () ;
try {
Annotation annos[] = ob.getClass().getAnnotations ();
// Отобразить все аннотации для Meta2.
System.out.println("Все аннотации для Meta2:");
for(Annotation a : annos) System.out.println(a) ;
System.out.println();
// Отобразить все аннотации для myMeth.
Method m = ob.getClass( ).getMethod("myMeth");
annos = m.getAnnotations () ;
System.out.println("Все аннотации для myMeth:");
for(Annotation a : annos) System.out.println(a);
}
catch {
NoSuchMethodException (exc) {
System.out.println("Метод не найден.");
}
}
public static void main(String args[]) {
myMeth();
}
}

Ниже показан результат работы этой программы: Все аннотации для Meta2:

@What(description=Аннотация тестового класса)
@MyAnno(str=Meta2, val=99)

Все аннотации для myMeth:

@What(description=Аннотация тестового метода)
@MyAnno(str=Testing, val=100)

Эта программа использует getAnnotations () для получения массива всех аннотаций, ассоциированных с классом Meta2 и методом myMeth (). Как объяснялось, getAnnotations () возвращает массив объектов Annotation. Вспомните, что Annotation — это суперинтерфейс для всех интерфейсов аннотаций, и что он переопределяет toString () из класса Object. То есть когда выводится ссылка на Annotation, вызывается его метод toString () для генерации строки, описывающей аннотацию, что и демонстрирует предыдущий пример.