注解的属性名与获取属性的方法名完全一样。
注解的属性的类型只能:基本类型、String、Class、枚举、注解,或这些类型的数组
@Retention(value = RUNTIME)
@Target(value=TYPE)
public @interface SourceAnnotation{
String value() default "SourceAnnotation";
}
@Retention(value = RUNTIME)
@Target(value = {TYPE,METHOD})
public @interface MyAnnotation{
//属性,有点怪
String value(); //字符串
String color() default "blue";
int[] arrayAttr() defalut {1, 2, 3}; //数组
enum EnumLamp{RED, GRREN, YELLOW} lamp() default EnumLamp.RED; //枚举 不会错把
@SourceAnnotation sourceAnnotation() default @SourceAnnotation(value = MyAnnotation);
}
@MyAnnotation(sourceAnnotation=@SourceAnnotation("yang"), color="red", arrayAttr={1,2,3})
public class UseAnnotation{
public void getAnnotationAttribute(){
//MyAnnotation myAnnotation = new MyAnnotation(); //?
if(Annotation.class.isAnnotationPresent(MyAnnotation.class)){
MyAnnotation myAnnotation = (MyAnnotation)MyAnnotation.class.newInstance();
System.out.println(myAnnotation.value());
System.out.println(myAnnotation.color());
System.out.println(myAnnotation.arrayAttr().length);
System.out.println(myAnnotation.lamp());
System.out.println(myAnnotation.sourceAnnotation());
}
}
}
|
|