注解机制详解要点
注解的常见分类
1> Java内置注解
- @Override:表示当前的方法定义将覆盖父类中的方法
- @Deprecated:表示代码被弃用,编译器会将发出警告
- @SuppressWarnings:表示关闭编译器警告信息
2> 元注解
@Target:描述注解的使用范围(即:被修饰的注解可以用在什么地方),格式:@Target({ElementType.TYPE, ElementType.METHOD})
//ElementType 枚举
public enum ElementType {
TYPE, // 类、接口、枚举类
FIELD, // 成员变量(包括:枚举常量)
METHOD, // 成员方法
PARAMETER, // 方法参数
CONSTRUCTOR, // 构造方法
LOCAL_VARIABLE, // 局部变量
ANNOTATION_TYPE, // 注解类
PACKAGE, // 可用于修饰:包
TYPE_PARAMETER, // 类型参数,JDK 1.8 新增
TYPE_USE // 使用类型的任何地方,JDK 1.8 新增
}
@Reteniton:描述注解保留的时间范围(即:被描述的注解在它所修饰的类中可以被保留到何时) ,格式:@Retention(RetentionPolicy.RUNTIME)
//RetentionPolicy 枚举
public enum RetentionPolicy {
SOURCE, // 源文件保留
CLASS, // 编译期保留,默认值
RUNTIME // 运行期保留,可通过反射去获取注解信息
}
@Documented:描述在使用 javadoc 工具为类生成帮助文档时是否要保留其注解信息
@Inherited:被它修饰的Annotation将具有继承性。如果某个类使用了被@Inherited修饰的Annotation,则其子类将自动具有该注解
@Repeatable:被它修饰的Annotation在同一对象上可以重复使用
//Java8
@Repeatable(Authorities.class)
public @interface Authority {
String role();
}
public @interface Authorities {
Authority[] value();
}
public class RepeatAnnotationUseNewVersion {
@Authority(role="Admin")
@Authority(role="Manager")
public void doSomeThing(){ }
}
@Native :被它修饰的成员变量可以被本地代码引用,常常被代码生成工具使用,不常用、了解即可
3> 自定义注解
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface MyMethodAnnotation{
...
}
注解不支持继承
- 不能使用关键字extends来继承某个@interface,但注解在编译后,编译器会自动继承java.lang.annotation.Annotation接口.
- 虽然反编译后发现注解继承了Annotation接口,请记住,即使Java的接口可以实现多继承,但定义注解时依然无法使用extends关键字继承@interface。
- 区别于注解的继承,被注解的子类继承父类注解可以用@Inherited: 如果某个类使用了被@Inherited修饰的Annotation,则其子类将自动具有该注解。
本站文章主要用于个人学习记录,可能对您有所帮助,仅供参考!

