美文网首页
《Oracle Java SE编程指南》27-02:定义注解类型

《Oracle Java SE编程指南》27-02:定义注解类型

作者: AT阿宝哥 | 来源:发表于2020-05-19 09:20 被阅读0次
课程封面-JavaSE-AT阿宝哥

内容导航

  • 前言
  • 1、定义注解
  • 2、空元素声明
  • 3、一个元素声明
  • 4、多个元素声明
  • 5、数组元素声明
  • 6、元素默认值
  • 7、完整案例

前言

在Java语言中,许多注解可以用来替换代码中的注释。

假设一个程序中有一些提供重要信息的注释,且普遍用于描述多个类型。比如:


package com.company.project.demo02;

public class MyClassA {

    // Author: AT阿宝哥
    // Date: 2020年06月04日
    // Current revision: 6
    // Last modified: 2020年06月14日
    // Last modified by: AT阿宝哥
    // Reviewers: 张三, 李四, 王麻子

    // 类代码在这里

}

package com.company.project.demo02;

public class MyClassB {

    // Author: AT阿宝哥
    // Date: 2020年06月04日
    // Current revision: 6
    // Last modified: 2020年06月14日
    // Last modified by: AT阿宝哥
    // Reviewers: 张三, 李四, 王麻子

    // 类代码在这里

}

通过观察上述代码,我们发现描述信息冗余非常严重,并且不利于维护。那么,此时可以用注解来改进代码。


1、定义注解

我们可以将注释中的“元数据”定义为注解类型,它是接口的一种特殊形式,需要在interface关键字的基础上增加前缀符号@。语法格式如下:


//  注解类型
public @interface AnnotationName {

    //  注解元素声明
    DataType elementName();
    //...更多元素声明

}

注解类型定义的主体包含注解元素声明,它们看起来很像方法,但不是方法。注意,它们可以定义可选的默认值。

定义好了注解类型,就可以在其它类型或者类型的主体中使用了,语法格式如下:


@AnnotationName 

或者

@AnnotationName ()

或者

@AnnotationName {elementName = value}


2、空元素声明

定义注解类型时,可以没有注解元素声明。

示例代码:


package com.company.project.demo0202;

public @interface MyAnnotation {


}


package com.company.project.demo0202;

//空元素
@MyAnnotation()
//@MyAnnotation
public class MyClass {

}


3、一个元素声明

定义注解类型时,可以写一个元素声明。

示例代码:


package com.company.project.demo020301;

//只有一个元素
public @interface MyAnnotation {

    String author();
}


package com.company.project.demo020301;

@MyAnnotation(author = "AT阿宝哥")
public class MyClass {

}

假如仅有的元素声明的名称为value,在使用该注解类型时,可直接赋值,从而省去value =

示例代码:


package com.company.project.demo020302;

//只有一个元素
public @interface MyAnnotation {

    String value();
}


package com.company.project.demo020302;

//@MyAnnotation(value = "")
//或者
//@MyAnnotation("Hello")
public class MyClass {

}


4、多个元素声明

定义注解类型时,可以写多个元素声明。

示例代码:


package com.company.project.demo0204;

//多个元素
public @interface MyAnnotation {

    String author();

    String date();
}


package com.company.project.demo0204;

//多个元素声明

@MyAnnotation(
        author = "AT阿宝哥" , 
        date = "2020年06月06日")

public class MyClass {

}


5、数组元素声明

定义注解类型时,元素声明的数据类型可以是数组。


package com.company.project.demo0205;

//数组元素声明
public @interface MyAnnotation {

    String[] value();
}


package com.company.project.demo0205;

//数组类型元素

//第一种:使用数组的初始化表达式,初始化多个元素值
@MyAnnotation(value = { "A", "B", "C" })

//第二种:直接复制为数组类型元素初始化一个元素值
//@MyAnnotation(value = "")

//第三种:如果数组类型元素只有一个元素值且名称又是value,可直接写值
//@MyAnnotation("Hello")

public class MyClass {

}


6、元素默认值

定义注解类型时,元素声明可以定义可选的默认值。

示例代码:


package com.company.project.demo0206;

//元素默认值
public @interface MyAnnotation {

    int currentRevision() default 1;

    String lastModified() default "N/A";

    String lastModifiedBy() default "N/A";
}


package com.company.project.demo0206;

//元素默认值

@MyAnnotation(currentRevision = 1 ,
        lastModified = "2020年06月06日",
        lastModifiedBy = "AT阿宝哥")

//或者

//@MyAnnotation()

//或者

//@MyAnnotation

public class MyClass {

}



7、完整案例

我们将上述多种语法融合在一起,写一个完整的案例。

示例代码:








持续更新,欢迎留言提议!
码字很累,多点赞多赞赏!


扫描二维码,关注AT阿宝哥

相关文章

网友评论

      本文标题:《Oracle Java SE编程指南》27-02:定义注解类型

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