![](/img/trans.png)
[英]It is possible to read the field value with annotations at runtime in java?
[英]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.class
此annotation instanceof MyAnn.class
找到批注后,可以通過annotation.value();
獲取annotation.value();
值annotation.value();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.