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

java-教程王 Java教程 发布时间:2021-10-14 17:41:55 阅读数:6152 1
下文笔者讲述使用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());
 }
}
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

本文链接: https://www.Java265.com/JavaCourse/202110/1462.html

最近发表

热门文章

好文推荐

Java265.com

https://www.java265.com

站长统计|粤ICP备14097017号-3

Powered By Java265.com信息维护小组

使用手机扫描二维码

关注我们看更多资讯

java爱好者