选择Annotation,新建一个Food的接口
/** * 该注解为一个字段注解 * Description: * * @author: jieya * Date: 2021-05-19 * Time: 18:05 */ @Target(ElementType.FIELD) @Retention(RetentionPolicy.RUNTIME) @Documented public @interface Food { String name() default ""; }选择Class,新建一个
/** * 这里定义了食物的相关注解 * Description: * * @author: jieya * Date: 2021-05-19 * Time: 18:11 */ public class FoodAnnotation { // 这里是单独定义 // @Target(ElementType.FIELD) // @Retention(RetentionPolicy.RUNTIME) // public @interface red { // } // // @Target(ElementType.FIELD) // @Retention(RetentionPolicy.RUNTIME) // public @interface green { // } // 这里使用枚举类经营定义 @Target(ElementType.FIELD) @Retention(RetentionPolicy.RUNTIME) public @interface color { /** * 颜色枚举 * */ public enum Color{RED,GREEN}; /** * 颜色属性 */ Color color() default color.Color.GREEN; } } /** * 定义了一个食物的实体对象类 * Description: * * @author: jieya * Date: 2021-05-19 * Time: 18:34 */ @Data @AllArgsConstructor public class FoodTest { @Food @FoodAnnotation.color(color = FoodAnnotation.color.Color.GREEN) private String bread; /** * 饮料不算食物,就不加注解 */ private String drinks; @Food @FoodAnnotation.color(color = FoodAnnotation.color.Color.RED) private String biscuits; /** * 以下为使用反射获取注解的内容 * * @param args */ public static void main(String[] args) { // 定义一个食物实体对象 FoodTest food = new FoodTest("桃李面包", "百世", "达利园"); // 获取类模板 Class c = food.getClass(); // 获取所有字段 for (Field f : c.getDeclaredFields()) { // 判断该字段是否有Food注解 if (f.isAnnotationPresent(Food.class)) { Food annotation = f.getAnnotation(Food.class); System.out.println("字段:[" + f.getName() + "]," + "该字段使用了Food注解"); // 判断该字段是否有color注解 if (f.isAnnotationPresent(FoodAnnotation.color.class)) { FoodAnnotation.color.Color color = f.getAnnotation(FoodAnnotation.color.class).color(); System.out.println("字段:[" + f.getName() + "]," + "该字段使用了color注解" + "颜色为" + color); } } else { System.out.println("字段:[" + f.getName() + "]," + "该字段没有使用注解"); } } } }FIELD注解是最常使用的,其他的注解方法的使用在这里就不在赘述了,都是大同小异的。