繁体   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