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);
}