package com.ethan.annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
//元注解
/*
* 元信息 ====》信息的信息
*
* 注解给编译器看的,生命周期就是CLASS
* SOURCE==源文件,CLASS==class文件,RUNTIME==内存中的字节码
*
* @SupperssWarnings SOURCE
* @Deprecated RUNTIME,调到内存中后,检查二进制
*/
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD,ElementType.TYPE})
public @interface EthanAnnotation {
String color() default "red";
String value() default "";
int[] arrayAttr() default {};
MetaAnnotation annotationAttr() default @MetaAnnotation("xxx");
Class clazz() default Object.class;
}
package com.ethan.annotation;
public @interface MetaAnnotation {
String value();
}
package com.ethan.annotation;
@EthanAnnotation(annotationAttr=@MetaAnnotation("yxy"),color="blue",arrayAttr=1,clazz=String.class)
public class AnnotationTest {
/**
* set path=c:\...;%path%;
* @param args
*/
@EthanAnnotation(color="red",arrayAttr={1,2,3})
public static void main(String[] args) {
if(AnnotationTest.class.isAnnotationPresent(EthanAnnotation.class)) {
EthanAnnotation annotation = AnnotationTest.class.getAnnotation(EthanAnnotation.class);
System.out.println(annotation.color());
System.out.println(annotation.arrayAttr().length);
System.out.println(annotation.annotationAttr().value());
System.out.println(annotation.clazz().getName());
};
}
}