Нахождение аннотации в списке - PullRequest
0 голосов
/ 08 сентября 2011

В моем коде я могу определить аннотацию для методов или полей, поэтому я проверяю методы и поля в классе, и все аннотации я сохраняю в отдельном списке.

Потом у меня есть метод getAnnotation.

Annotation getAnnotation(Class annotationClass) {
    for (Annotation annotation : annotations) {
        if (annotation.getClass().equals(annotationClass)) {
            return annotation;
        }
    }
    return null;
}

И я называю это так:

Annotation annotation = getAnnotation(MyAnnotation.class);

Проблема в том, что метод getAnnotation не совпадает с именами классов. Когда я отлаживаю, я вижу, что аннотации отображаются как прокси-объекты. Как я могу найти конкретную аннотацию, которую я хочу в этом случае?

1011 * ТИА *

Я определяю карту так:

Map<Class<? extends Annotation>, Annotation> annotations = new HashMap<Class<? extends Annotation>, Annotation>(4);

Я заполнил Карту так:

Annotation[] annotations = method.getAnnotations();
for (Annotation annotation : annotations) {
  annotations.put(annotation.getClass(), annotation);
}

Ответы [ 2 ]

1 голос
/ 08 сентября 2011

Ура! Я понял. Объект Annotation имеет метод annotationType () для возврата реального имени класса.

Таким образом, код для всех заинтересованных лиц будет выглядеть так:

Карта, Аннотация> аннотации = новая HashMap, Аннотация> (4);

Annotation[] annos = method.getAnnotations();
for (Annotation anno : annos) {
    annotations.put(anno.annotationType(), annotation);
}

Тогда сопоставление классов работает нормально.

1 голос
/ 08 сентября 2011

Вам лучше заполнить Map<Class<? extends Annotation>, Annotation> - таким образом, поиск будет O (1), и вам будет все равно, прокси он или нет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...