• 自定义注解


    自定义注解:
    1.成员类型是受限的,合法的类型包括原始类型及String,Calss,Anootation,Enumreation
    2.如果注解只有一个成员,则成员名必须取名为Value(),在使用的时可以忽略成员名和赋值号(=)
    3.没有成员的注解称为标识注解

    public @interface Description{//使用@interface关键字注解
    String name();//成员以无参无异常方式声明
    String author();
    int age() default 19;//可以用default为成员变量指定一个默认值
    }

    元注解
    @Target({ElementType.CONSTRUCTOR,ElementType.FIELD,ElementType.METHOD})
    // Target 注解的作用域 CONSTRUCTOR 构造方法声明,FIELD 字段声明,LOCAL_VARIABLE 局部变量声明 ,METHOD 方法声明,PACKAGE 包声明,PARAMETER 参数声明,TYPE 类接口。
    @Retention(RetentionPolicy.RUNTIME)
    //Retention 生命周期——SOURCE 只在源码显示,编译时会丢弃;CLASS 编译时会记录到class中,运行时忽略;RUNTIME 运行时存在,可以通过反射读取。
    @Inherited
    //Inherited 允许子类继承
    @Documented
    //Documented 生成javadoc的时候包含注解

    下面以一个demo演示解析注解

    package com.description.demo;
    
    import java.lang.annotation.Documented;
    import java.lang.annotation.ElementType;
    import java.lang.annotation.Inherited;
    import java.lang.annotation.Retention;
    import java.lang.annotation.RetentionPolicy;
    import java.lang.annotation.Target;
    
    //注解的作用域
    @Target({ElementType.METHOD,ElementType.TYPE})
    //注解的生命周期
    @Retention(RetentionPolicy.RUNTIME)
    //注解是否允许被继承
    @Inherited
    //是否生成注解Javadoc文档子注解
    @Documented
    public @interface Description {
        String desc();
        String auth()default"rongrong";
    }

    接口

    package com.description.demo;
    
    public interface Person {
    
        String name();
        int age();
        void say();
    }

    实现类

    package com.description.demo;
    
    @Description(desc = "class annotation")
    public class Child implements Person {
    
        @Override
        @Description(desc = "method annotation")
        public String name() {
            // TODO Auto-generated method stub
            return null;
        }
    
        @Override
        public int age() {
            // TODO Auto-generated method stub
            return 0;
        }
    
        @Override
        public void say() {
            // TODO Auto-generated method stub
    
        }
    
    }

    测试类:

    /**
     * 
     */
    package com.description.demo;
    
    import java.lang.annotation.Annotation;
    import java.lang.reflect.Method;
    
    import org.junit.Test;
    
    /**
     * @author Administrator
     *    解析注解
     */
    public class MainTest {
        
        @SuppressWarnings("unchecked")
        @Test
        public void run(){
            try {
    //            通过反射加载实体类
                Class c = Class.forName("com.description.demo.Child");
    //            找到类上面的注解
                boolean isExist= c.isAnnotationPresent(Description.class);
                if (isExist) {
    //                拿到实体类,一定强转为注解类型,反则找不到
                    Description d = (Description) c.getAnnotation(Description.class);
                    System.out.println(d.desc());
                }
    //            找到方法上的注解
                Method[] method = c.getMethods();
                for (Method ms : method) {
                    isExist = ms.isAnnotationPresent(Description.class);
                    if (isExist) {
                        Description d = ms.getAnnotation(Description.class);
                        System.out.println(d.desc());
                    }
    //                另一种方法
                    Annotation[] annotation = ms.getAnnotations();
                    for (Annotation as : annotation) {
                        if (as instanceof Description) {
                            String desc = ((Description) as).desc();
                            System.out.println(desc);
                        }
                    }
                }
            } catch (ClassNotFoundException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    
    }
  • 相关阅读:
    compile js file in java project
    AS400上的C编程
    Linux图片工具
    vncserver nonroot user
    [struts]freemarker.beans: Key "location" was not found on instance of java.lang.NullPointerException
    VS2010 express中改变VC Default include/lib/… 目录
    重启博客,回味在深圳打拼的软件从业生涯,与同路人共勉
    JavaScript设置Cookie、获取Cookie和清除Cookie
    WebService 开启参数调试
    JavaScript获取Url参数
  • 原文地址:https://www.cnblogs.com/longronglang/p/6376183.html
Copyright © 2020-2023  润新知