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());
 }
}
经验分享 程序员 微信小程序 职场和发展