参考资料
一、Annotation的作用、格式、使用场景
- 作用
- 不是程序本身,可以对程序作出解释。(这一 点,跟注释没什么区别)
- 可以被其他程序(比如: 编译器等)读取。(注解信息处理流程,是注解和注释的重大区别。如果没有注解信息处理流程,则注解毫无意义)
- 格式:
- 注解是以“@注释名"在代码中存在的,还可以添加一些参数值,例
如:@SuppressWarnings(value = "unchecked")
。
- 注解是以“@注释名"在代码中存在的,还可以添加一些参数值,例
- 使用场景
- 可以附加在
package
,class
,method
,field
等上面,相当于给它们添加
了额外的辅助信息,我们可以通过反射机制编程实现对这些元数据的
访问。
- 可以附加在
二、常见注解
-
@Override
- 子类中重写父类函数
-
@Deprecated
- 定义在java.lang.Deprecated中
- 此注释可用于修辞方法、属性、类,表示不建议使用这样的元素,通常是因为它很危险或存在更好的选择。
-
@SuppressWarnings
- 定义在javalang.SuppressWarnings中
- 用来抑制编译时的警告信息。
-
@Target
-
@Target(value= ElementType. TYPE)
-
作用:
- 用于描述注解的使用范围(即:被描述的注解可以用在什么地方)
饰范围 取值ElementType ckage包 PACKAGE
接口、枚举、Annotation类型 TYPE
成员(方法、构造方法、成员变量、枚举值) CONSTRUCTOR
用于描述构造器
FIELD
:用于描述域
METHOD
:用于描述方法参数和本地变量 LOCAL_VARIABLE
:用于描述局部变量
PARAMETER
:用于描述参数
-
-
@Retention
- 作用
取值RetentionPolicy 作用 SOURCE 在源文件中有效(即源文件保留) CLASS 在class文件中有效(即class保留) RUNTIME 在运行时有效(即运行时保留);为 RUNTIME
时可以被反射机制读取
三、自定义注解
- 使用@interface自定义注解时,自动继承了
java.lang.annotation.Annotation
接口 - 要点:
@interface
用来声明一个注解- 格式为:
public @interface 注解名{定义体}
- 格式为:
- 其中的每一个方法实际 上是声明了一个配置参数。
- 方法的名称就是参数的名称
- 返回值类型就是参数的类型(返回值类型只能是基本类型、Class、 String、
enum)。 - 可以通过default来声明参数的默认值。
- 如果只有一个参数成员, - -般参数名为value
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target(value = {ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@interface MyAnnotation01{
String name() default "";
int age() default 0;
String[] favor() default {"象棋", "听歌"};
}
public class MyAnnotation {
@MyAnnotation01(name = "张三",age = 18, favor = {"攀岩"})
public void test(){
}
}