[英]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.