一:自定义注解
/**
* 水果颜色注解
* @author dell
*
*/
@Target(ElementType.FIELD)//应用于字段
@Retention(RetentionPolicy.RUNTIME)
public @interface FruitColor {
public enum Color {bule,red,green};
Color fruitColor() default Color.green;
}
/**
* 水果名称注解
* @author dell
*
*/
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface FruitName {
String value() default "";
}
二:被注解的类
public class Apple {
@FruitName("apple")
private String appleName;
@FruitColor(fruitColor=Color.red)
private String appleColor;
@FruitProvider(id=1,name="红富士集团",address="广东省广州市天河区")
private String appleProvider;
//set get省略...
}
三:注解处理器
/**
* 注解处理器
*
* @author dell
*
*/
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(FruitColor.class)) {
FruitColor fruitColor = field.getAnnotation(FruitColor.class);
strFruitColor = strFruitColor + fruitColor.fruitColor().toString();
System.out.println(strFruitColor);
} else if (field.isAnnotationPresent(FruitProvider.class)) {
FruitProvider fruitProvider = field.getAnnotation(FruitProvider.class);
strFruitProvicer = strFruitProvicer + fruitProvider.address() + fruitProvider.id()
+ fruitProvider.name();
System.out.println(strFruitProvicer);
} else if (field.isAnnotationPresent(FruitName.class)) {
FruitName fruitName = field.getAnnotation(FruitName.class);
strFruitName = strFruitName + fruitName.value();
System.out.println(strFruitName);
}
}
}
}
四:使用
public static void main(String[] args) {
FruitInfoUtil.getFruitInfo(Apple.class);
}
五:结果输出
水果名称:apple
水果颜色:red
供应商信息:广东省广州市天河区1红富士集团