美文网首页
Java注解

Java注解

作者: GTMYang | 来源:发表于2021-07-29 11:32 被阅读0次

    类型: @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();
            }
    

    【参阅】

    相关文章

      网友评论

          本文标题:Java注解

          本文链接:https://www.haomeiwen.com/subject/pmmxvltx.html