![](https://img.haomeiwen.com/i8331536/da784d1586295c5d.png)
内容导航:
- 前言
- 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、完整案例
我们将上述多种语法融合在一起,写一个完整的案例。
示例代码:
持续更新,欢迎留言提议!
码字很累,多点赞多赞赏!
![](https://img.haomeiwen.com/i8331536/d14151a05112b1fa.png)
网友评论