自定义annotation 包含2部分
1 自定义注解
2 自定义注解处理器
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface FruitColor {
public enum Color {
BLUE, RED, GREEN
};
Color fruitColor() default Color.RED;
}
ElementType 有FIELD,METHOD等等
public class Apple {
@FruitName(name = "apple")
private String fruitName;
@FruitColor(fruitColor = Color.RED)
private String fruitColor;
@FruitProvider(id = 1, name = "a", address = "a b c")
private String appleAddress;
public String getFruitName() {
return fruitName;
}
public void setFruitName(String fruitName) {
this.fruitName = fruitName;
}
public String getFruitColor() {
return fruitColor;
}
public void setFruitColor(String fruitColor) {
this.fruitColor = fruitColor;
}
public String getAppleAddress() {
return appleAddress;
}
public void setAppleAddress(String appleAddress) {
this.appleAddress = appleAddress;
}
}
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface FruitProvider {
public int id() default -1;
public String name() default "";
public String address() default "";
}
public class FruitInfoUtil {
public static void getFruitInfo(Class<?> clazz) {
String strFruitName = " 水果名称:";
String strFruitColor = " 水果颜色:";
String strFruitProvicer = "供应商信息:";
Field[] fields = clazz.getDeclaredFields();
for (Field field : fields) {
if (field.isAnnotationPresent(FruitName.class)) {
FruitName fruitName = (FruitName) field.getAnnotation(FruitName.class);
strFruitName = strFruitName + fruitName.name();
System.out.println(strFruitName);
} else if (field.isAnnotationPresent(FruitColor.class)) {
FruitColor fruitColor = (FruitColor) field.getAnnotation(FruitColor.class);
strFruitColor = strFruitColor + fruitColor.fruitColor().toString();
System.out.println(strFruitColor);
} else if (field.isAnnotationPresent(FruitProvider.class)) {
FruitProvider fruitProvider = (FruitProvider) field.getAnnotation(FruitProvider.class);
strFruitProvicer = " 供应商编号:" + fruitProvider.id() + " 供应商名称:" + fruitProvider.name() + " 供应商地址:" + fruitProvider.address();
System.out.println(strFruitProvicer);
}
}
}
public static void main(String[] args) {
getFruitInfo(Apple.class);
}
}