使用注解
一个简单例子:
@Test public void Action() {
}
每个注解名字的前面都有@符号
注解元素
注解可以拥有被称为元素的键/值。例如:@Test(timeout=1000)
注解元素可以是以下类型:
- 基本类型值(数值型、字符型、布尔型)
- String
- Class对象
- enum(枚举实例)
- 注解
- 数组
注解声明
声明注解可以出现在如下情况的声明里:
- 类(包括enum)和接口(包括注解接口)
- 方法
- 构造函数
- 实例变量(包括enum常量)
- 局部变量
- 参数变量和catch子句
//对于变量,注解要放在类型前面:
public void Action(@SuppressWarnings("unchecked") String str)
{
@SuppressWarnings("unchecked") List<String> users = new ArrayList<>();
}
- 类型参数
- 包
定义注解
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@interface MyAnnotation {
int id() default 0;
String info() default "";
}
注解接口中的元素声明实际上是方法声明。注解接口的方法可以没有参数,没有throws语句,也不能是泛型的。
注解Target和注解Retention是元注解,指定注解可以出现的位置以及在哪里可以访问到。
-
@Retention:当一个普通注解被
@Retention
注解标识时,它限定了这个普通注解的生命周期。-
RetentionPolicy.SOURCE
: Java源码期起作用,编译期被丢弃; -
RetentionPolicy.CLASS
: 只在编译期起作用,单不会被加载到JVM中; -
RetentionPolicy.RUNTIME
: 它会被加载进入到JVM中,在Java程序运行的生命周期中都起作用;
-
-
@Target:当一个普通注解被
@Target
注解标识时,这个普通注解就被限定了在那些地方起作用。比如被限定只在java的类上起作用、或者方法上起作用。-
ElementType.TYPE
: 对注解、类、接口、枚举进行注解; -
ElementType.FIELD
: 对属性进行注解; -
ElementType.METHOD
: 对方法进行注解; -
ElementType.PARAMETER
: 对形参进行注解; -
ElementType.CONSTRUCTOR
: 对构造器进行注解; -
ElementType.LOCAL_VARIABLE
: 对局部变量进行注解; -
ElementType.ANNOTATION_TYPE
: 对注解进行注解; -
ElementType.PACKAGE
: 对一个包进行注解; -
ElementType.TYPE_PARAMETER
: 对引用类型参数注解(JDK1.8新增); -
ElementType.TYPE_USE
: 对类型进行注解(JDK1.8新增);
-
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。