2014-10-09 4 views
1

У меня есть класс с именем ClBranch.java, как показано ниже:Как получить названия аннотаций?

@Entity 
    @Table(name = "PROVINCE") 
    public class PROVINCE implements Serializable { 
     @Id 
     @Column(name="PR_CODE", length = 50) 
     private String provinceCode 

     @Column(name="PR_NAME", length = 500) 
     private String provinceName 
    ...... 
    getter-setter. 
    } 


This is my code: 
    public static String getClassAnnotationValue(Class classType, Class annotationType, String attributeName) { 
      String value = null; 

      Annotation annotation = classType.getAnnotation(annotationType); 
      if (annotation != null) { 
       try { 
        value = (String) annotation.annotationType().getMethod(attributeName).invoke(annotation); 
       } catch (Exception ex) { 
        ex.printStackTrace(); 
       } 
      } 

      return value; 
     } 


String columnName = getClassAnnotationValue(PROVINCE .class, Column.class, "name");  

этим путем, я получаю только ColumnName в ПРОВИНЦИИ. Я не могу получить ColumnName. Как мне это сделать?

+0

Строка ColumnName = getClassAnnotationValue (ПРОВИНЦИЯ .class, Table.class, "имя"); –

ответ

1

Аннотации @Column определены на полях, а не на классе. Таким образом, вы должны запрашивать значение аннотаций из частных полей:

String columnName = getAnnotationValue(PROVINCE.class.getDeclaredField("provinceCode"), Column.class, "name"); 

Чтобы иметь возможность передавать Field объектов в ваш метод, изменить тип вашего параметра classType от Class к AnnotatedElement. Затем вы можете пройти классы, поля, параметры и методы:

public static String getAnnotationValue(AnnotatedElement element, Class annotationType, String attributeName) { 
    ... 
} 
Смежные вопросы