• Java中的注解2_自定义注解实现非空判断


    1.项目结构如下

    image-20210425221210761

    2.YangNotNull

    package cn.yang37.annotation.p20210425;
    
    import java.lang.annotation.ElementType;
    import java.lang.annotation.Retention;
    import java.lang.annotation.RetentionPolicy;
    import java.lang.annotation.Target;
    
    
    /**
     * @Description: 自定义注解 实现非空判断
     * @Author: Yiang37
     * @Date: 2021/04/25 21:45:45
     * @Version: 1.0
     */@Target(ElementType.FIELD)
    @Retention(RetentionPolicy.RUNTIME)
    public @interface YangNotNull {
         String value();
    }
    
    

    3.YangNotNullExplain

    package cn.yang37.annotation.p20210425;
    
    
    import java.lang.reflect.Field;
    import java.util.ArrayList;
    import java.util.List;
    
    /**
     * @Description:
     * @Class: YangNotNullExplain
     * @Author: Yiang37
     * @Date: 2021/4/25 21:47
     * @Version: 1.0
     */
    public class YangNotNullExplain {
        public static <T> List<String> validate(T t) throws IllegalAccessException {
            ArrayList<String> resList = new ArrayList<>();
            //获取类中声明的Field
            Field[] declaredFields = t.getClass().getDeclaredFields();
    
            for (Field declaredField : declaredFields) {
                // 判断YangNotNull类型注解是否在declaredField类型上
                if (declaredField.isAnnotationPresent(YangNotNull.class)) {
                    // 反射获取的字段值 设置不检查访问权限
                    declaredField.setAccessible(true);
                    Object value = declaredField.get(t);
                    if (value == null) {
                        YangNotNull yangNotNull = declaredField.getAnnotation(YangNotNull.class);
                        resList.add(yangNotNull.value() + "不能为空!");
                    }
                }
    
            }
            return resList;
        }
    }
    

    4.User

    package cn.yang37.annotation.p20210425;
    
    /**
     * @Description:
     * @Class: User
     * @Author: Yiang37
     * @Date: 2021/4/25 21:56
     * @Version: 1.0
     */
    public class User {
    
        @YangNotNull("inputUsername")
        private String username;
    
        @YangNotNull("inputAge")
        private int age;
    
        @YangNotNull("inputSex")
        private String sex;
    }
    

    5.UserTest

    package cn.yang37.annotation.p20210425;
    
    import java.util.List;
    
    /**
     * @Description:
     * @Class: UserTest
     * @Author: Yiang37
     * @Date: 2021/4/25 21:59
     * @Version: 1.0
     */
    public class UserTest {
        public static void main(String[] args) throws IllegalAccessException {
            User user = new User();
    
            List<String> validateList = YangNotNullExplain.validate(user);
    
            validateList.forEach(System.out::println);
        }
    }
    

    结果

    inputUsername不能为空!
    inputSex不能为空!
    
  • 相关阅读:
    常用正则
    使用html2canvas 图片 清晰性高 兼容好
    倒计时调用
    多线程实现等待屏(欢迎屏)的实现
    代码生成机器人被360软件管家收录
    代码生成器1.0正式发布
    代码生成器
    代码生成器 - 第一版最终版
    ICSharpCode.TextEditor使用经验
    代码生成器
  • 原文地址:https://www.cnblogs.com/yang37/p/14702404.html
Copyright © 2020-2023  润新知