自定义注解
@interface Annotation{ } 定义一个注解 @Annotation,一个注解是一个类
元注解
- @Target:定义了修饰的类型
- @Retention:定义了注解的声明周期
- @Documented:是一个标记注解,没有成员,被修饰的注解会生成到javadoc
- @Inherited:子类Class对象可以使用getAnnotations()获取父类被@Inherited修饰的注解
public enum ElementType {
TYPE 类 / 接口 / enum
FIELD 字段
METHOD 方法
PARAMETER 参数
CONSTRUCTOR 构造函数
LOCAL_VARIABLE 局部变量
ANNOTATION_TYPE 注解声明(应用于另一个注解上)
PACKAGE 包
TYPE_PARAMETER 类型参数
TYPE_USE 类型使用
}
public enum RetentionPolicy {
SOURCE 源文件保留,编译时期丢弃
CLASS 编译时保留,class文件中有效
RUNTIME 运行时保留
}
内置注解
- Override:重载,此方法覆盖了父类的方法
- Deprecated:弃用,已经过时的方法或类
- SuppressWarnings:抑制警告,告诉Java编译器关闭对类、方法及成员变量的警告
注解参数
- 只能用public或默认(default)这两个访问权修饰
- 如果只有一个参数成员,最好把参数名称设为"value",后加小括号
- 注解参数成员支持的数据类型:
- 所有基本数据类型(int,float,boolean,byte,double,char,long,short)
- String类型
- Class类型
- enum类型
- Annotation类型
- 以上所有类型的数组
getAnnotations() 和 getDeclaredAnnotations() 区别
- getAnnotations():返回此元素上存在的所有注解的数组,包括从父类继承的
- getDeclaredAnnotations():返回直接存在于此元素上的所有注解的数组,不包括父类的注解
注解不能被继承
- 类不从它所实现的接口继承annotation
- 方法不从它所重载的方法继承annotation
参考文章
深入浅出Java Annotation(元注解和自定义注解)
深入理解 Java 注解类型 (@Annotation)