Java:如何提取注解成员

标签 java reflection annotations

如何提取Java注解的成员。例如。我们有以下一个:

@Retention(RetentionPolicy.RUNTIME)
public @interface XYZ {
    int min() default 0;
    String name() default "";
    String [] colors();
}

我有一个类,其方法用 XYZ 注释。如何为每个类方法提取注释信息?就像我在向控制台打印注释时在括号中得到的一样:

@com.stackoverflow.XYZ(min=0, name=Jack, colors=[red, white, blue])

值得一提的是,在运行时之前我不知道 XYZ。换句话说,我想在运行时使用反射分析任意类,并在运行时提取详细的注释信息。

最佳答案

这是一个打印“红色”的人为示例(您需要添加适当的异常处理等):

public class Annotate {

    @XYZ(colors="red") public void m() {}

    public static void main(String[] args) throws Exception {
        Annotate a  = new Annotate();
        Method m = a.getClass().getDeclaredMethod("m");
        XYZ ann = (XYZ) m.getAnnotation(XYZ.class);
        if (ann != null) {
            System.out.println(ann.colors()[0]);
        }
    }
}

请注意,如果方法未使用 @XYZ 注释,则 ann 将为空。

关于Java:如何提取注解成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22453540/

相关文章:

java - 如何将字符串集合和每个元素验证为 URL?

java - bazel:sema注释和子目录

java - 为什么这个 Mockito 测试失败了?

java - 将多个注释与参数合并

java - RxJava : merge() changes the order of the emitted items?

java |如何使用反射和 RTTI 计算所有方法?

java - 在运行时从java中的另一个进程获取初始化的静态对象

c# - 如何迭代 C# 对象,查找特定类型的所有实例,以便构建这些实例的单独列表?

java - 如何在java中以多个日期作为值对 map 进行排序

java - SpringBoot创建DynamicDataSource : Requested bean is currently in creation: Is there an unresolvable circular reference?