• Java使用反射获取注解信息的简介说明


    转自:

    Java使用反射获取注解信息的简介说明

    下文笔者讲述使用java反射获取注解信息的方法分享,如下所示:

    注解简介说明

    注解可以理解为java代码的一个注释,注解本身不起任何作用,它需要借助反射为类做一些扩展功能
    例:注解的使用

    //TestClass上使用了注解@MyAnnotation
    @MyAnnotation(name="java",value="java265.com")
    public class TestClass {
    }
    
    //定义注解
    @Retention(RetentionPolicy.RUNTIME)
    @Target(ElementType.TYPE)
    public @interface MyAnnotation {
      public String name();
      public String value();
    }
    

    java访问注解的示例分享

    Class aClass = TestClass.class;
    Annotation[] annotations = aClass.getAnnotations();
    for(Annotation annotation : annotations){
        if(annotation instanceof MyAnnotation){
            MyAnnotation myAnnotation = (MyAnnotation) annotation;
            System.out.println("name: " + myAnnotation.name());
            System.out.println("value: " + myAnnotation.value());
        }
    } 
    

    方法注解

    public class TestClass {
      @MyAnnotation(name="methoName",  value = "this is method")
      public void testFun(){}
    }
     
    Method method = ... //获取方法对象
    Annotation[] annotations = method.getDeclaredAnnotations();
    for(Annotation annotation : annotations){
        if(annotation instanceof MyAnnotation){
            MyAnnotation myAnnotation = (MyAnnotation) annotation;
            System.out.println("name: " + myAnnotation.name());
            System.out.println("value: " + myAnnotation.value());
        }
    }
    

    参数注解

     public class TestClass {
      public static void testFun(
            @MyAnnotation(name="aName", value="aValue") String parameter){
      }
    }
    
    //使用Method对象来访问方法参数注解
    
    Method method = ... //获取方法对象
    Annotation[][] parameterAnnotations = method.getParameterAnnotations();
    Class[] parameterTypes = method.getParameterTypes();
    int i=0;
    for(Annotation[] annotations : parameterAnnotations){
      Class parameterType = parameterTypes[i++];
      for(Annotation annotation : annotations){
        if(annotation instanceof MyAnnotation){
            MyAnnotation myAnnotation = (MyAnnotation) annotation;
            System.out.println("param: " + parameterType.getName());
            System.out.println("name : " + myAnnotation.name());
            System.out.println("value: " + myAnnotation.value());
        }
      }
    }
    ---------------------
    注意事项:
        Method.getParameterAnnotations()方法返回一个注解类型的二维数组
    

    变量注解

    public class TestClass {
      @MyAnnotation(name="someName",  value = "Hello World")
      public String myField = null;
    }
    
    Field field = ... //获取方法对象
    Annotation[] annotations = field.getDeclaredAnnotations();
    for(Annotation annotation : annotations){
     if(annotation instanceof MyAnnotation){
     MyAnnotation myAnnotation = (MyAnnotation) annotation;
     System.out.println("name: " + myAnnotation.name());
     System.out.println("value: " + myAnnotation.value());
     }
    }
  • 相关阅读:
    5年在职经验之谈:2年功能测试、3年自动化测试,从入门到不可自拔...
    最好用的Python库推荐总结,每一个都用处很大!
    tese_Time_2h
    杰理之MIDI 乐谱解码运行步骤【篇】
    sprigboot+在线预定车位管理 毕业设计-附源码221738
    Flutter 从源码扒一扒Stream机制
    SwiftUI ☞ Animation
    参考文献批量添加上标
    gcc编译webrtc x64
    计算机网络基础
  • 原文地址:https://blog.csdn.net/qq_25073223/article/details/126673072