1.Target
在Java中,自定义注解可以使用@Target元注解来指定注解可以应用的元素类型。@Target注解具有ElementType类型的value属性,可以设置一个数组,用于指定注解可以应用到的元素类型。以下是一些可能的ElementType类型:
- ElementType.TYPE:类、接口或枚举类型
- ElementType.FIELD:字段
- ElementType.METHOD:方法
- ElementType.PARAMETER:方法参数
- ElementType.CONSTRUCTOR:构造函数
- ElementType.LOCAL_VARIABLE:局部变量
- ElementType.ANNOTATION_TYPE:注解类型
- ElementType.PACKAGE:包
- ElementType.TYPE_PARAMETER:泛型类型参数
- ElementType.TYPE_USE:任意类型使用
例如,可以在自定义注解类上使用@Target注解来指定注解可以应用到类、接口或枚举类型:
```
@Target(ElementType.TYPE)
public @interface MyAnnotation {
// ...
}
```
这样,使用该注解的时候,只能应用到类、接口或枚举类型上,而不能应用到其他元素类型上。
2. @Retention
在Java中,自定义注解可以使用@Retention元注解来指定注解的生命周期。@Retention注解具有RetentionPolicy类型的value属性,可以设置一个枚举值,用于指定注解的生命周期。以下是RetentionPolicy类型的可能值:
- RetentionPolicy.SOURCE:注解只在源代码中存在,编译后被丢弃。
- RetentionPolicy.CLASS:注解在源代码和编译后的字节码中存在,运行时被丢弃。
- RetentionPolicy.RUNTIME:注解在源代码、编译后的字节码和运行时都存在,可以通过反射机制获取。
例如,可以在自定义注解类上使用@Retention注解来指定注解的生命周期为RUNTIME:
```
@Retention(RetentionPolicy.RUNTIME)
public @interface MyAnnotation {
// ...
}
```
这样,使用该注解的时候,注解在源代码、编译后的字节码和运行时都存在,可以通过反射机制获取。
3.@Documented
在Java中,自定义注解可以使用@Documented元注解来指定注解是否包含在JavaDoc文档中。@Documented注解没有属性,只需要将其放在自定义注解类上即可。如果一个注解被@Documented注解修饰,则在使用JavaDoc工具生成文档时,该注解会被包含在文档中。
例如,可以在自定义注解类上使用@Documented注解来指定注解包含在JavaDoc文档中:
```
@Documented
public @interface MyAnnotation {
// ...
}
```
这样,在使用JavaDoc工具生成文档时,如果某个类或方法使用了该注解,该注解会被包含在生成的文档中。