一个简单例子:
@Test public void Action() { }
每个注解名字的前面都有@符号
注解可以拥有被称为元素的键/值。例如:
@Test(timeout=1000)
注解元素可以是以下类型:
声明注解可以出现在如下情况的声明里:
//对于变量,注解要放在类型前面: 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 ""; }
注解Target和注解Retention是元注解,指定注解可以出现的位置以及在哪里可以访问到。
@Retention:当一个普通注解被 @Retention
注解标识时,它限定了这个普通注解的生命周期。
RetentionPolicy.SOURCE RetentionPolicy.CLASS RetentionPolicy.RUNTIME
@Target:当一个普通注解被 @Target
注解标识时,这个普通注解就被限定了在那些地方起作用。比如被限定只在java的类上起作用、或者方法上起作用。
ElementType.TYPE ElementType.FIELD ElementType.METHOD ElementType.PARAMETER ElementType.CONSTRUCTOR ElementType.LOCAL_VARIABLE ElementType.ANNOTATION_TYPE ElementType.PACKAGE ElementType.TYPE_PARAMETER ElementType.TYPE_USE