注解

作者: CherryChenR | 来源:发表于2020-03-16 20:40 被阅读0次

    一.概念

    • 用于说明程序,又称为Java标注。于jdk1.5开始引入。

    二.作用

    1.编译检查,如@Overrid
    2.编写文档,如@Author
    3.代码分析(利用反射)

    三.使用

    1. JDK预定义注解

    1.1@Deprecated

    用于标识过时方法

    2.自定义注解

    2.1格式

    2.1.1 元注解(用于描述注解的注解)
    • @Retention
      描述注解的保留阶段。对应java代码经历的三个阶段:SOURCE,CLASS,RUNTIME
    • @Target
      描述注解作用的位置。使用了一个枚举类来定义。
    public enum ElementType {
        /** 类,接口(包括注解类型)或枚举的声明 */
        TYPE,
    
        /** 属性的声明 */
        FIELD,
    
        /** 方法的声明 */
        METHOD,
    
        /** 方法形式参数声明 */
        PARAMETER,
    
        /** 构造方法的声明 */
        CONSTRUCTOR,
    
        /** 局部变量声明 */
        LOCAL_VARIABLE,
    
        /** 注解类型声明 */
        ANNOTATION_TYPE,
    
        /** 包的声明 */
        PACKAGE
    }
    
    • @Document
      描述注解是否被抽取到api文档
    • @Inherited
      描述是否被子类继承
    2.1.2注解声明
    Public @Interface 注解名 {
       属性列表
    } 
    
    2.1.2.1 属性
    • 概念:注解中定义的成员方法。
    • 返回值类型:基本数据类型String枚举类注解以上类型的数组
    • 使用注意:如果定义了属性,并且没有设置默认值的话,再使用时必须给属性赋值。以下是设置默认值的示例:
    Public @Interface XXX{
      String name default "萨拉瓦";
    }
    

    四.本质

    注解其实是自动继承java.lang.annotation.Annotation的接口。

    五.在程序中获取注解中的属性值

    1. 获取注解定义位置的对象(Field,Method,Class...)
    2. 获取指定的注解对象
      XX.getAnnotation(class)
      3.调用注解抽象方法,获取配置的值

    六.特殊语法

    六.特殊语法部分转载自:https://blog.csdn.net/xsp_happyboy/article/details/80987484

    特殊语法一:

    如果注解本身没有注解类型元素(属性),那么在使用注解的时候可以省略(),直接写为:@注解名,它和标准语法@注解名()等效!

    @Retention(RetentionPolicy.RUNTIME)
    @Target(value = {ElementType.TYPE})
    @Documented
    public @interface FirstAnnotation {
    }
    
    
    //等效于@FirstAnnotation()
    @FirstAnnotation
    public class JavaBean{
        //省略实现部分
    }
    
    

    特殊语法二:

    如果注解本本身只有一个注解类型元素,而且命名为value,那么在使用注解的时候可以直接使用:@注解名(注解值),其等效于:@注解名(value = 注解值)

    @Retention(RetentionPolicy.RUNTIME)
    @Target(value = {ElementType.TYPE})
    @Documented
    public @interface SecondAnnotation {
      String value();
    }
    
    
    
    //等效于@ SecondAnnotation(value = "this is second annotation")
    @SecondAnnotation("this is annotation")
    public class JavaBean{
      //省略实现部分
    }
    

    特殊用法三:

    如果注解中的某个注解类型元素是一个数组类型,在使用时又出现只需要填入一个值的情况,那么在使用注解时可以直接写为:@注解名(类型名 = 类型值),它和标准写法:@注解名(类型名 = {类型值})等效!

    @Retention(RetentionPolicy.RUNTIME)
    @Target(value = {ElementType.TYPE})
    @Documented
    public @interface ThirdAnnotation {
        String[] name();
    }
    
    
    
    //等效于@ ThirdAnnotation(name = {"this is third annotation"})
    @ ThirdAnnotation(name = "this is third annotation")
    public class JavaBean{
        //省略实现部分
    }
    

    特殊用法四:

    如果一个注解的@Target是定义为Element.PACKAGE,那么这个注解是配置在package-info.java中的,而不能直接在某个类的package代码上面配置。

    相关文章

      网友评论

          本文标题:注解

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