概述
- Annotation 注解,是一种代码级别的说明。自JDK1.5之后引入,与类、接口、枚举是在同一层次。注释是写给开发人员看的,注解是写给机器看的。
- 注解的作用
注解的定义
// 定义注解
public @interface MyAnnotation {
// 定义注解中的属性
public abstract String username() default "ade";
}
- 注解使用 @interface 来定义,使用public来修饰;如果不用public来修饰,不能在包外被引用
- 自定义注解中的属性定义
- 属性格式:修饰符(public abstract) 返回值类型 属性名() [default 默认值]
- 修饰符:默认public abstract,可以省略
- 返回值类型:基本类型 String Class 注解 枚举 及以上类型的一维数组
- 属性名:自定义
- default 默认值:可以省略
注解的使用
@MyAnnotation(username = "ade")
public class MyTest {
@Test
public void test() {
boolean flag = MyTest.class.isAnnotationPresent(MyAnnotation.class);
System.out.println(flag); // false
}
}
- 注解可以没有属性;如果有属性,需要被小括号括住
- 属性格式:属性名=属性值,属性名={属性值1,属性值2,······}
- 在一个对象上,注解只能使用一次
注解的解析
- 我们在类、方法上使用注解后,需要通过解析来获取注解的属性,JDK提供java.lang.reflect.AnnotatedElement接口允许在运行时通过反射来获取
- AnnotatedElement API
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/c34c2d04f7eb6d80ec2733e7e6c24192.png)
- 但是,上面的案例中结果是false。那是因为每个自定义注解,必须使用JDK自带的元注解修饰才能使用。
JDK 元注解
- 所谓元注解,就是用来修饰注解的注解。
- JDK总共提供了4种元注解
- 重新修改后,测试用例输出:true