自定义注解,我们来写注解。
自定义注解
自定义注解使用@interface,自动继承了java.lang.annotation.Annotation接口。
- @interface用来声明一个注解,格式:
public @interface 注解名{ 定义内容 }
- 其中的每一个方法实际上声明了一个配置参数
- 方法的名称就是参数的名称
- 返回值类型就是参数类型(返回值只能是基本类型,class、string、enum)
- 可以通过default来声明参数的默认值
- 如果只有一个参数成员,一般参数名设为value(使用注解时可省略参数名value,其他的参数名不行)
- 注解元素必须要有值,我们定义注解元素时,经常使用空字符串,0作为默认值
一般格式
关于自定义注解的元注解,建议:
- @Target,作用域,设置可在类、方法上使用。
@Target({ElementType.ANNOTATION_TYPE,ElementType.METHOD})
- @Retention,注解保存级别,设置为RUNTIME。
@Retention(RetentionPolicy.RUNTIME)
关于元注解@Target与@Retention,见这篇博客:传送门
1 |
({ElementType.ANNOTATION_TYPE,ElementType.METHOD}) |
参数
正常情况
定义注解时定义了参数,使用时就需要给相应的参数不然就会报错(跟方法一样)。
参数类型 + 参数名()
String name();
1 |
({ElementType.ANNOTATION_TYPE,ElementType.METHOD}) |
还能是数组:
1 |
({ElementType.ANNOTATION_TYPE,ElementType.METHOD}) |
使用自定义注解:
参数名 = 参数值
name = "hello"
1 |
//自定义注解 |
多个参数时,不需要考虑顺序。
1 |
//自定义注解 |
使用自定义注解时不给参数,会报错:
参数默认值
可以通过default来声明参数的默认值。String name() default "qsdbl";
。
默认值为“-1”,表示不存在。例如:int age() default -1;
。
1 |
({ElementType.ANNOTATION_TYPE,ElementType.METHOD}) |
使用:
使用时参数值可填可不填(有了默认值)。
1 |
//自定义注解 |
只有一个参数
如果只有一个参数成员,一般参数名设为value(使用注解时可省略参数名value,其他的参数名不行)
1 |
({ElementType.ANNOTATION_TYPE,ElementType.METHOD}) |
使用时,可省略参数名value
1 |
//自定义注解 |