2013-12-16 5 views
0

У меня есть следующий класс в Java:Получить аннотацию на конкретном объекте в классе

public class Classic { 
    @Annotate1(location="foo", name="bar") 
    public final Comp1 comp1 = new Comp1(); 

    @Annotate2(member="blessed") 
    public final Comp2 comp2 = new Comp2(); 
} 

Теперь в отдельном классе, у меня есть доступ к объектам Classic, Comp1 и Comp2. На том же месте у меня нет знаний об именах полей в Classic.
Как я могу получить аннотацию для comp1 и comp2 объектов?

+2

Через отражения, вы можете получить поле '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' на каждом ' –

+0

Чтобы уточнить точку @ SotiriosDelimanolis, аннотация не может идти на объект. Он может идти на класс или поле (или методы или другие подобные вещи), но не на объект. – yshavit

+0

Это может помочь http://stackoverflow.com/questions/2286998/java-accessing-annotations-through-reflection – user1445967

ответ

2

Вот пример, чтобы вы начали:

public class Classic { 
    @Annotate1(location = "foo", name = "bar") 
    public final Comp1 comp1 = new Comp1(); 

    @Annotate2(member = "blessed") 
    public final Comp2 comp2 = new Comp2(); 

    public static void main(String[] args) { 
     Class clazz = Classic.class; 
     for(Field field: clazz.getDeclaredFields()){ 

      if(field.isAnnotationPresent(Annotate1.class)){ 
       Annotate1 annotate1 = field.getAnnotation(Annotate1.class); 
       System.out.println(annotate1.name()); 
      }else if(field.isAnnotationPresent(Annotate2.class)){ 
       Annotate2 annotate2 = field.getAnnotation(Annotate2.class); 
       System.out.println(annotate2.member()); 
      } 
     } 
    } 
} 

Если вы делаете свои собственные аннотации убедитесь, что они установлены быть сохранены во время выполнения:

@Retention(RetentionPolicy.RUNTIME) //Important 
public @interface Annotate1 { 

    String name(); 

    String location(); 

} 
+0

@SotiriosDelimanolis Спасибо за редактирование! Я совершаю эту ошибку все время. Мне действительно нужно нарушить эту привычку. –

+0

LOL, я вернулась. –

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