@Retention
指示要注释具有注释类型的注释的保留时间。 如果注释类型声明中没有保留注释,则保留策略默认为RetentionPolicy.CLASS 。
保留元注释仅在元注释类型直接用于注释时才起作用。 如果元注释类型用作另一注释类型的成员类型,则它不起作用。
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.ANNOTATION_TYPE)
public @interface Retention {
/**
* 返回保留策略。
* Returns the retention policy.
*
* @return the retention policy
*/
RetentionPolicy value();
}
RetentionPolicy
注释保留政策。 这个枚举类型的常量描述了保留注释的各种策略。 它们与Retention元注释类型结合使用,以指定要保留注释的时间长度
public enum RetentionPolicy {
/**
* 注释将由编译器丢弃
* Annotations are to be discarded by the compiler.
*/
SOURCE,
/**
* 注释将由编译器记录在类文件中,但在运行时不需要由VM保留。这是默认的行为,如果元注释类型被用作另一种注释类型的成员类型,则没有影响
* Annotations are to be recorded in the class file by the compiler
* but need not be retained by the VM at run time. This is the default
* behavior.
*/
CLASS,
/**
* 注释将由编译器记录在类文件中,并在运行时由VM保留,因此可以反射性地读取它们。
* Annotations are to be recorded in the class file by the compiler and
* retained by the VM at run time, so they may be read reflectively.
*
* @see java.lang.reflect.AnnotatedElement
*/
RUNTIME
}