自定义注解
# 自定义注解
属性:属性就是接口中的抽象方法
接下来我们说说定义属性的要求。
# 格式要求 1 属性的返回值类型
要定义注解的,里面的属性要有返回值类型,所以不能定义 void 的属性。可以有下列返回值
- 基本数据类型
- String
- 枚举
- 注解
- 以上类型的数组
例如,我们可以这样定义注解:
public @interface MyAnno2 {
int value();
String show2();
}
1
2
3
4
2
3
4
# 格式要求 2 定义了属性,在使用时需要给属性赋值
如果只定义了注解,但是不赋值,会报错。例如我们定义一个类,使用了注解:
@MyAnno2
public class AnnoDemo3 {
}
1
2
3
4
2
3
4
在还没有编译的时候,IDE 就提示有错误了:
尝试编译,也是有报错的
javac AnnoDemo3.java
AnnoDemo3.java:1: 错误: 对于元素value,show2, 注释 @MyAnno2 缺少默认值
@MyAnno2
^
1 个错误
1
2
3
4
5
2
3
4
5
所以我们得赋值,属性要求什么返回值,我们就赋值什么。由于 赋值时就像给属性赋值一样(属性和属性值),所以称之为属性。
@MyAnno2(value=1, show2="str")
public class AnnoDemo3 {
}
1
2
3
4
2
3
4
所以我们起名字的时候,尽量让属性名看上去更像属性,例如 age,name 等。
其他注意事项:
- 使用注解,需要对注解里的属性进行赋值。
- 给多个属性赋值用逗号隔开
- 如果定义属性时,使用 default 关键字给属性默认初始化值,则使用注解时,可以不进行属性的赋值。
- 如果只有一个属性需要赋值,并且属性的名称是 value,则 value 可以省略,直接定义值即可,例如
@MyAnno(18)
,@SuppressWarnings("all")
. 这个 value 属性非常特殊。 - 给数组赋值时,值使用
{}
包裹,例如strs={"abc", "bbb"}
。如果数组中只有一个值,则{}
可以省略
public @interface MyAnno3 {
String name();
int age() default 18;
String[] strs();
}
1
2
3
4
5
2
3
4
5
上次更新: 2024/11/9 10:42:30