2014-03-27 35 views
2

我有註釋無法訪問場的註釋在Java中

public @interface Equals { 
String name() default "unknown"; 
} 

和類,其字段由註釋的Equals

public class TransportSearch { 
@Equals(name="vin") 
public String vin = null; 
} 

,我有一個方法,另一類

public String (TransportSearch transportSearch){ 
    Field[] fields = transportSearch.getClass().getDeclaredFields(); 

    String vin = null; 

    for(Field field : fields){ 
     try { 
      Equals annot = field.getAnnotation(Equals.class); 

      if(annot!=null && annot.name().equals("vin")){ 
       try { 
        vin = (String) field.get(transportSearch); 
       } catch (IllegalAccessException e){ 
        e.printStackTrace(); 
       } 
      } 

     } catch(NullPointerException e) { 
      e.printStackTrace(); 
     } 
    } 
    return vin; 
} 

不幸在這個方法field.getAnnotation(Equals.class)返回null,我不明白爲什麼? 你能幫我嗎?

回答

4

您必須設置註釋的RetentionPolicyRetentionPolicy.RUNTIME

import java.lang.annotation.Retention; 
import java.lang.annotation.RetentionPolicy; 

@Retention(RetentionPolicy.RUNTIME) 
public @interface Equals { 
    String name() default "unknown"; 
} 

默認RetentionPolicyRetentionPolicy.CLASS,這意味着註釋並不需要在運行時可用。

+1

小小的更正:默認的RetentoinPolicy是RetentionPolicy.CLASS。但它是一個正確的答案。 – Seelenvirtuose

+0

@Seelenvirtuose感謝您的更正 - 我編輯了我的答案以反映這一點。 – Balder