@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD,ElementType.TYPE})
public @interface ItcastAnnotation {
//注解的属性
String color() default "bule";
//当属性 为 value 时 ,并且只有该属性没有默认值时 可简单写成 ("xxx")
String value();
//数组类型的属性
int[] arrayAttr() default {1,3,5};
//枚举类型属性
DayEnum day() default DayEnum.MONDAY;
//注解类型属性
MetaAnnotation annotationAttr() default @MetaAnnotation("lh");
}
public class ItcastProxyClass {
/**
* 如果数组属性只有一个值,可省略{}
*
* @param args
*/
@ItcastAnnotation(color = "red", value = "abc",arrayAttr=2)
public static void main(String[] args) {
boolean present = SelfAnnotationTest.class.isAnnotationPresent(ItcastAnnotation.class);
if(present) {
ItcastAnnotation annotation = SelfAnnotationTest.class.getAnnotation(ItcastAnnotation.class);
System.out.println(annotation.color());
System.out.println(annotation.value());
System.out.println(annotation.arrayAttr().length);
System.out.println(annotation.day().next(DayEnum.MONDAY));
System.out.println(annotation.annotationAttr().value());
}
}
}
@ItcastAnnotation(value="abc",arrayAttr= {1,2,3})
public class SelfAnnotationTest {
}
public @interface MetaAnnotation {
String value();
}
public enum DayEnum {
MONDAY,
SUNDAY;
public DayEnum next(DayEnum day) {
if(day == MONDAY) {
return SUNDAY;
}else {
return MONDAY;
}
}
}