Hutool 工具类优雅非空验证

时间:2025-02-14 16:04:01

common lang3库常用的StringUtils、ObjectUtils用来做非空判断,Hutool库提供了工具类,并且功能更强大。

常用的非空判断判断

判断是否是null、undefined。

判断是否null,或者空字符。

判断是否是空白字符串。

多字符串同时判空

判断多个字符串是否为null,如果有一个为空则为返回false

测试如下:

@Test
public void testEmptys(){
    String arg1 = "arg1";
    String arg2 = null;
    String arg3 = "arg3";
    boolean allEmpty = StrUtil.isAllNotEmpty(arg1, arg2, arg3);
    // 这样判断简写代码,只要其中一个为空则返回false
    System.out.println(" 是否不存在空:" + allEmpty);
}

打印如下:

是否不存在空:false

多层对象判空 ObjectUtil

对于多层复杂的对象,获取属性要避免空指针异常,一层一层判断会比较冗余, 可以多层判断,如果上层为空则不会执行后面的方法,用法如下。

    @Data
    public static class Result {
        public int code;
        public User user;
        @Data
        public static class User {
            private String name;
        }
    }
    @Test
    public void testEmptyObjs(){
        // 设置数据
        Result result = new Result();
        Result.User user1 = new Result.User();
        user1.setName("张三");
        result.setUser(user1);
        // 这样判断避免了 多层嵌套空指针的情况
        if (ObjectUtil.isAllNotEmpty(result, result.getUser(), result.getUser().getName())) {
            System.out.println("不为空");
        }
    }

多层对象判空 Opt

除了ObjectUtil类,hutool还提供了Opt类,用法类似Java8的Optional,写法如下:

@Test
public void testHutoolOpt(){
    // 设置数据
    Result result = new Result();
    Result.User user1 = new Result.User();
    user1.setName("张三");
    result.setUser(user1);
    // 这样判断避免了 多层嵌套空指针的情况
    Opt<String> map = Opt.ofNullable(result).map(Result::getUser).map(Result.User::getName);
    // (str);
    if (!map.isEmpty()) {
        String s = map.get();
        System.out.println("不为空");
    }
}

多层对象取属性 BeanPath(自带判空)

BeanPath可以通过表达式的方式获取数据,并且纯天然自带非空判断。

@Test
public void testBeanPath(){
    // 设置数据
    Result result = new Result();
    Result.User user1 = new Result.User();
    user1.setName("张三");
    result.setUser(user1);

    BeanPath resolver = new BeanPath("");
    String o = (String) resolver.get(result);
    System.out.println(o);
}