In the source code of @Retention annotation in java, @Retention is used in its definition itself, hows that possible.
Even the RetentionPolicy is set at RUNTIME, so how could it get executed before its not ready to run.
package java.lang.annotation;
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.ANNOTATION_TYPE)
public @interface Retention {
/**
* Returns the retention policy.
* @return the retention policy
*/
RetentionPolicy value();
}