一、自定义注解的语法
使 用 @interface 定 义 自 定 义 注 解 时 , 自 动 继 承 了 java.lang.annotation.Annotation 接口
1) @interface 用来声明一个注解
2) 其中的每一个方法实际上是声明了一个配置参数
a) 方法的名称就是参数的名称
b) 返回值类型就是参数类型(返回值类型只能是基本 类型、Class、String、enum)
c) 可以通过 default 来声明参数的默认值 d) 如果只有一个成员,一般参数名为 value
注意事项:
- 注解元素必须要有值。我们定义注解元素时,经 常使用空字符串,0 作为默认值。
- 也经常使用负数(比如-1)表示不存在的含义
二、 元注解
元注解的作用就是负责注解其他注解。在 Java 中定义了 4 个标准的 meta-annotation 类型,它们被用来提供对其它 annotation 类型作说明
这些类型和它们所支持的类在java.lang.annotation包中可以找到
1) @Target 2) @Retention 3) @Documented 4) @Inherited
三、@Target
作用:用于描述注解的使用范围(即被描述的注解可以用在什 么地方)
举例:@Target(value=ElementType.TYPE)
四、@Retention
作用:表示需要在什么级别保存该注解信息,用于描述注解的生命周期
自定义注解一:
import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; /** * ClassName:MyAnnotation * date: 2020/4/16 10:25 * * @author 王鼎禹 */ @Target(ElementType.METHOD) @Retention(RetentionPolicy.CLASS) public @interface MyAnnotation { String stuName() default ""; //方法的名称就是参数的名称stuName() // 返回值类型就是参数类型(返回值类型只能是基本 类型、Class、String、enum) //default 来声明参数的默认值,经常使用空字符串,0作为默认值 int age() default 0; String [] school() default {"B站大学","清华大学"}; }
自定义注解二:
1 import java.lang.annotation.ElementType; 2 import java.lang.annotation.Retention; 3 import java.lang.annotation.RetentionPolicy; 4 import java.lang.annotation.Target; 5 6 /** 7 * ClassName:MyAnnotation2 8 * date: 2020/4/16 10:31 9 * 10 * @author 王鼎禹 11 */ 12 @Target({ElementType.TYPE,ElementType.METHOD}) 13 @Retention(RetentionPolicy.RUNTIME) 14 public @interface MyAnnotation2 { 15 String value(); //如果只有一个成员,一般参数名为 value
16 }
1 //@MyAnnotation 该注解只能应用到方法上 2 //@MyAnnotation2(value="aaaa") 3 @MyAnnotation2("aaa") 4 public class Test5 { 5 @MyAnnotation(stuName = "王一一") 6 public static void show(){ 7 } 8 @MyAnnotation(stuName = "乔二二",age = 23,school = {"家里蹲大学","蓝翔大学"}) 9 public void method(){ 10 11 } 12 }