Java注解

类型: @interface

作用

为修饰者提供元数据

注解本质

/**Annotation接口源码*/
public interface Annotation {

    boolean equals(Object obj);

    int hashCode();

    Class<? extends Annotation> annotationType();
}

元注解:提供给注解使用的注解

. @Retention
. @Target
. @Documented
. @Inherited
. @Repeatable

定义与使用

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface MyTestAnnotation {
    String name() default "mao";
    int age() default 18;
}

@MyTestAnnotation(name = "father",age = 50)
public class Father {
}

/****************************************
* 注解获取方法
***/
/**是否存在对应 Annotation 对象*/
public boolean isAnnotationPresent(Class<? extends Annotation> annotationClass) {
        return GenericDeclaration.super.isAnnotationPresent(annotationClass);
}
 /**获取 Annotation 对象*/
public <A extends Annotation> A getAnnotation(Class<A> annotationClass) {
        Objects.requireNonNull(annotationClass);
        return (A) annotationData().annotations.get(annotationClass);
}
 /**获取所有 Annotation 对象数组*/   
public Annotation[] getAnnotations() {
        return AnnotationParser.toArray(annotationData().annotations);
}   

注解获取实例

        /**
         * 获取类注解属性
         */
        Class<Father> fatherClass = Father.class;
        boolean annotationPresent = fatherClass.isAnnotationPresent(MyTestAnnotation.class);
        if(annotationPresent){
            MyTestAnnotation annotation = fatherClass.getAnnotation(MyTestAnnotation.class);
            System.out.println(annotation.name());
            System.out.println(annotation.age());
        }

        /**
         * 获取方法注解属性
         */
        try {
            Field age = fatherClass.getDeclaredField("age");
            boolean annotationPresent1 = age.isAnnotationPresent(Age.class);
            if(annotationPresent1){
                Age annotation = age.getAnnotation(Age.class);
                System.out.println(annotation.value());
            }

            Method play = PlayGame.class.getDeclaredMethod("play");
            if (play!=null){
                People annotation2 = play.getAnnotation(People.class);
                Game[] value = annotation2.value();
                for (Game game : value) {
                    System.out.println(game.value());
                }
            }
        } catch (NoSuchFieldException e) {
            e.printStackTrace();
        }

【参阅】

推荐阅读更多精彩内容

  • 注解就是代码中的特殊标记,这些标记可以在编译、类加载、运行时被读取,并执行相应的处理。 1. 元注解 —— 修饰注...
    不抱怨做自己阅读 68评论 0 0
  • 参考网址: 《秒懂,Java 注解 (Annotation)你可以这样学》 《Java注解基本原理》 《注解A...
    琦小虾阅读 6,947评论 7 87
  • 关于注解首先引入官方文档的一句话:Java 注解用于为 Java 代码提供元数据。作为元数据,注解不直接影响你的代...
    编程小世界阅读 214评论 0 0
  • 前言 承接注解的上一篇帮你搞懂java注解(一)[https://www.jianshu.com/p/8ecb0f...
    _火山_阅读 106评论 0 1
  • 董多娇第226天坚持分享,焦点相信,每个人在每一刻都会为自己做出一个决定与选择,是他们当时认为最合适自己的,所以任...
    良知良能良知良能阅读 1,850评论 1 1
  • 一、jQuery简介 JQ是JS的一个优秀的库,大型开发必备。在此,我想说的是,JQ里面很多函数使用和JS类似,所...
    Welkin_qing阅读 3,627评论 0 1
  • 跑马灯在项目了其实应用的还比较多,特别是做多媒体的时候,音乐视频蓝牙等等经常用到。 比如音乐的专辑信息,蓝牙通话记...
    江南皮皮阅读 2,213评论 1 6
  • 找一个地方,不被人际关系网淹没,不被窒息的生活压力裹挟,忘记钱财之物,日出而作,日落而息。繁华的都市不适合,人情往...
    不会爱的草鱼阅读 780评论 1 0