2014-11-11 4 views
1

Я пытаюсь получить значение/значения, указанные внутри аннотации.Получение значения из аннотации

например: Если @SuppressWarnings("unchecked") - аннотация, я хочу получить значение - не отмечен.

public boolean visit(SingleMemberAnnotation annotation) { 

    // returns the type name of the annotation - SuppressWarnings 
    annotation.getTypeName();  

    return true; 
} 

Не удалось найти какие-либо методы внутри класса Annotation, чтобы получить то же самое.
Любые помогают/указатели оценили

ответ

1

Как вам вы посещаете SingleMemberAnnotation, вы должны изучить класс SingleMemberAnnotation, а не Annotation. As you can see имеет метод getValue, который возвращает Expression. Это упрощенный случай, когда у вас есть только одно выражение, например, в @SuppressWarnings("unchecked").

Для обычных аннотаций вы столкнулись с NormalAnnotation, который будет иметь список значений, которые вы можете получить, используя интуитивно названный метод values().

Итак, поскольку эти два типа узлов аннотаций отличаются друг от друга в отношении того, как извлекать значения, такой метод не существует в их общем базовом классе Annotation. Однако для неизменяемых узлов можно было бы рассматривать их более абстрактно, представляя значение аннотации одного члена как список размеров один, однако, поскольку эти узлы AST изменяемы, то есть список, возвращаемый NormalAnnotation.values(), поддерживает добавление, его нельзя предоставить на базовый класс.

0

Вы должны сделать это с помощью класса

for (Annotation annotation : YourClass.class.getAnnotations()) { 
     Class<Annotation> type = annotation.annotationType(); 
     System.out.println("Values of " + type .getName() + ":"); 

     for (Method method : type.getDeclaredMethods()) { 
      System.out.println(" " + method.getName() + ": " + 
           method.invoke(annotation, null)); 
     } 
    } 
0

Предположив у вас есть класс с именем Test с SupressWarning, вы должны сделать:

Test.class.getAnnotation(SuppressWarnings.class).value; 
0

Насколько я знаю, вы можете получить доступ к аннотации только с помощью getAnnotation, у которых есть политика хранения во время выполнения, но у SuppressWarnings есть политика хранения как источника, я сомневаюсь, что вы можете получить к ней доступ.

Смежные вопросы