
-
从JVM的角度看,注解本身可以被编译器打包进入class文件,因此注解是"元数据"。可通过反射机制访问。
-
反编译看代码的本质:注解本质上是一个接口,该接口默认继承Annotation
public interface MyAnno extends java.lang.annotation.Annotation{} -
作用分类:
- 编写文档:通过代码里的标识的元数据 生成文档【生成doc文档】
- 代码分析:通过代码里的标识的元数据 对代码进行分析【使用反射】
- 编译检查:通过代码里的标识的元数据 让编译器能够实现基本的编译检查【override】
- 方法名称就是参数名称;
- 返回值类型就是参数的类型;
- default声明参数默认值;
- 如果只有一个参数,一般参数名为value,使用是可省略参数只写值;
- 注解元素必须有值;
实例
@Target({ElementType.TYPE,ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface Interf {
int type() default 0;
int id() default -1; // -1,代表不存在
String value() default "info";
String[] arr() default {"a","b"};
}
// 使用
@Interf(id = 1, type = 2, arr = {"c","d"})
public class Test01(){
}
元注解
-
元注解:负责注解其它注解,Java提供4个meta-annotation类型,用于注解annotation类型;
- @Target:描述注解使用的范围
- @Retention:描述注解的生命周期(SOURCE 源代码 < CLASS < RUNTIME)
- @document:该注解将包含在javadoc中
- @Inherited:子类可以继承父类中的该注解
-
支持在java.lang.annotation包中;
-
源码分析
-
@Target
// Target 需要一个参数ElementType[] @documented @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.ANNOTATION_TYPE) public @interface Target { ElementType[] value(); }public enum ElementType { TYPE, FIELD, METHOD, PARAMETER, CONSTRUCTOR, // 构造器 LOCAL_VARIABLE, ANNOTATION_TYPE, PACKAGE, TYPE_PARAMETER, TYPE_USE, MODULE } -
@Retention
@documented @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.ANNOTATION_TYPE) public @interface Retention { RetentionPolicy value(); }public enum RetentionPolicy { SOURCE, CLASS, RUNTIME } -
@document
@documented @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.ANNOTATION_TYPE) public @interface documented { } -
@Inherited
@documented @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.ANNOTATION_TYPE) public @interface Inherited { }
-
包:java.lang.
@Override:检测被该注解标注的方法是否继承自父类(接口)的;
@Deprecated:该注解标注的内容,表示已过时,或有更好的方法;
@SuppressWarnings:压制警告
@SuppressWarnings("all")
@SuppressWarnings(valu={"uncheched","deprecation"})
javadoc 注解
- @author 作者名
- @version 版本号
- @since 指明需要最早使用的jdk版本
- @param 参数名
- @return 返回值情况
- @throws 异常抛出情况
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)