Java注解详解
Java1.5 引入了注解,注解作为程序的元数据嵌入到程序中。注解可以被一些解析工具或者编译工具进行解析。我们也可以声明注解在编译过程或者执行时产生作用。
创建 Java 自定义注解:
package com.click369;import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;@Documented
@Target(ElementType.METHOD)
@Inherited
@Retention(RetentionPolicy.RUNTIME)
public @interface MethodInfo {String author() </span><span style="color: rgba(0, 0, 255, 1)">default</span> "author"<span style="color: rgba(0, 0, 0, 1)">; String date(); </span><span style="color: rgba(0, 0, 255, 1)">int</span> version() <span style="color: rgba(0, 0, 255, 1)">default</span> 1<span style="color: rgba(0, 0, 0, 1)">; String comments();
}
1. 注解方法不能带有参数。
2. 注解方法返回值类型限定为:基本类型、String、Enums、Annotation 或者这些类型的数组。
3. 注解方法可以有默认值。
4. 注解本身能够包含元注解,元注解被用来注解其他注解。
四种类型的元注解:
1.@Documented---- 指明拥有这个注解的元素可以被 javadoc 此类的工具文档化。这种类型应该用于注解那些影响客户使用带注释的元素声明的类型。
如果一种声明使用 Documented 进行注解,这种类型的注解被作为被标注的程序成员的公共 API。
2.@Target---- 指明该类型的注解可以注解的程序元素的范围。该元注解的取值可以为 TYPE,METHOD,CONSTRUCTOR,FIELD 等。如果 Target 元注
解没有出现,那么定义的注解可以应用于程序的任何元素。
3.@Inherited---- 指明该注解类型被自动继承。如果用户在当前类中查询这个元注解类型并且当前类的声明中不包含这个元注解类型,那么也将自动查
询当前类的父类是否存在 Inherited 元注解,这个动作将被重复执行直到这个标注类型被找到,或者是查询到顶层的父类。
4.@Retention---- 指明了该注解被保留的时间长短。RetentionPolicy 取值为 SOURCE、CLASS、RUNTIME。
Java 内建注解:
1.@Override---- 当我们想要复写父类的方法时,我们需要使用注解去告诉编译器我们想要复写这个方法。这样一来当父类中的方法移除或者发生更改时编译器将提示错误信息。
2.@Deprecated---- 当我们希望编译器知道某一个方法不建议使用时,我们应该使用这个注解。java 在 javadoc 中推荐使用该注解,我们应该提供为什么该方法不推荐使用以及替代的方法。
3.@SuppressWarnings---- 这个仅仅是告诉编译器忽略特定的警告信息,例如在泛型中使用原生数据类型。他的保留策略是 SOURCE 并且被编译器丢弃。