您现在的位置是:门户> 编程语言> Java

Java注解与反射原理说明
2020-08-30 82人围观 0条评论
简介今天小编就为大家分享一篇关于Java注解与反射原理说明,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧

    一 点睛

    注解若想发挥更大作用,还需借助反射机制之力。通过反射,可以取得一个方法上声明的注解的全部内容。

    一般有两种需求:

    1 取得方法中全部的注解,通过调用getAnnotations来实现。

    2 判断操作是否是指定注解,通过调用getAnnotation来实现。

    下面从源码角度来说明怎样获取这些注解信息。

    二 源码导读――取得方法中全部的注解

    public class AccessibleObject implements AnnotatedElement {
      ...
      //取得全部Annotation
      public Annotation[] getAnnotations() {
        return getDeclaredAnnotations();
      }  
      ...
    }
    public final class Method extends Executable {
      ...
      public Annotation[] getDeclaredAnnotations() {
        //针对Method类,需要调用父类的getDeclaredAnnotations方法
        return super.getDeclaredAnnotations();
      }  
      ...
    }
    //Method的父类Executable的getDeclaredAnnotations实现全部注解信息的获取
    public abstract class Executable extends AccessibleObject
      implements Member, GenericDeclaration {
      ...
      public Annotation[] getDeclaredAnnotations() {
        return AnnotationParser.toArray(declaredAnnotations());
      }  
      ...
    }

    三 源码导读――判断操作是否是指定注解

    public final class Method extends Executable {
      ...
      ////取得指定Annotation
      public  T getAnnotation(Class annotationClass) {
        return super.getAnnotation(annotationClass);
      }
      ...
    }
    public abstract class Executable extends AccessibleObject
      implements Member, GenericDeclaration {
      ...
      public  T getAnnotation(Class annotationClass) {
        Objects.requireNonNull(annotationClass);
        //获得指定注解类的信息
        return annotationClass.cast(declaredAnnotations().get(annotationClass));
      }  
      ...
    }

    总结

    以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对脚本之家的支持。如果你想了解更多相关内容请查看下面相关链接

分享:

文章评论

    • wxpython 学习笔记 第一天
    • python文本数据处理学习笔记详解