簡體   English   中英

如何在類中的字段上讀取運行時注釋

[英]how to read runtime annotations on a field within a class

想象一下一個帶有運行時保留的名為“ MyAnn”的注釋,一個MyClass類和一個名為MyData的抽象類。 MyClass具有一個MyData類型的字段,該字段帶有MyAnn注釋。 在MyData實例中,如何查看注釋MyAnn是否存在並檢索其信息?

注意-在Java8中,我知道我們可以在構造時直接對內部類進行注釋-並且可以工作-但我需要基於字段注釋來進行此工作。

謝謝你的幫助!

public MyClass extends MySuperClass() {
   @MyAnn(value = "something")
   protected MyData mydata;

   public void doSomething() {
      mydata = new MyData() {};
      mydata.initialize();
   }
}

public abstract MyData() {
   String myValue = null;

   public void initialize() {
      if (***I am annotated with MyAnn) {
         myValue = (***value from annotation MyAnn);         
      }
   }
}

@Retention(RetentionPolicy.RUNTIME)
public @interface MyAnn {
    String myvalue;
}

MyData無法直接知道是否已使用MyAnn對其進行注釋,因為它不知道當前實例是字段還是獨立實例,如果它是字段,則不知道該字段是否已使用MyAnn進行注釋。

因此,您將需要以某種方式獲取並將value傳遞給initialize() ,並且需要以某種方式在調用initialize()的位置獲取value 從您的代碼看來, "something"可以作為參數傳遞給initialize() ,這比起對字段進行注釋然后檢查字段是否被注釋要容易得多。

但是無論如何,如果要檢查字段是否帶注釋,則必須:

  • 使用getClass().getDeclaredFields()獲得類的字段

  • 遍歷田野; 對於每個字段,

    • 調用isAnnotationPresent( MyAnn.class )

    • 調用field.getAnnotations() ,為每個注釋循環,並檢查annotation instanceof MyAnn.classannotation instanceof MyAnn.class

找到批注后,可以通過annotation.value();獲取annotation.value();annotation.value();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM