gpt4 book ai didi

java - 如何读取类中字段的运行时注释

转载 作者:行者123 更新时间:2023-11-30 02:27:30 25 4
gpt4 key购买 nike

想象一个名为“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注解。

因此,您将需要以某种方式获取并将其传递给initialize(),并且您将需要以某种方式获取在调用 initialize() 的地方。从您的代码来看,似乎可以将 "something" 作为参数传递给 initialize(),这使得整个事情比注释字段然后检查要容易得多该字段是否带注释。

但无论如何,如果你想检查某个字段是否被注释,你必须:

  • 使用 getClass().getDeclaredFields() 获取类的字段

  • 循环字段;对于每个字段,要么

    • 调用 isAnnotationPresent( MyAnn.class )

    • 调用field.getAnnotations(),循环每个注释,并检查此annotation instanceof MyAnn.class

找到注释后,您可以使用 annotation.value(); 获取其值

关于java - 如何读取类中字段的运行时注释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45269291/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com