在平时的业务开发中,空指针出现的频率是比较高的bug,在出现空指针的时候,很多小伙伴都是习惯性地加!=null 的判断,这个bug就能解决。
当代码中频繁出现 !=null 的判断时,我们就会很头疼,能不能高效、优雅地做这个判断?
答案当然是可以的。
1. 在做!=null 的判断时,请停顿一下,看一下我们要做判断的这个数据是什么类型的?
平时开发数据类型无非就是String类型,Object 自定义对象 List集合,Array数组,Map集合类型。
2.需要思考这个数据类型对应的工具类有那些?
String类型,对应的工具类有StringUtils
Object对象,对应的工具类有ObjectUtils
Array数组,对应的工具类有Arrays
List集合,Map集合对应的工具类有Collections, CollectionUtils
这些工具类都是Java,Spring框架自带的工具类。
3.使用对应类型的工具类进行业务判断
- 如果是String类型时,使用StringUtils工具类
String str = "";
StringUtils.isEmpty(str); // true
StringUtils工具类比较有针对性,是针对String字符串的工具类
public static boolean isEmpty(@Nullable Object str) {
return str == null || "".equals(str);
}
在isEmpty方法中,既有为null的判断,也有是否等于空字符串的判断。
- 如果这个数据是Object类型,可以使用ObjectUtils工具类
Object obj = null;
ObjectUtils.isEmpty(obj); // true
- 如果这个数据是Map类型,也可以使用ObjectUtils 工具类
Map<String,Object> map = Collections.emptyMap();
ObjectUtils.isEmpty(map);// true
- 如果这个数据是List类型,还可以使用ObjectUtils工具类
List<Integer> list =Collections.EMPTY_LIST;
ObjectUtils.isEmpty(list); // true
- 如果这个数据是数组类型的,可以使用ObjectUtils工具类
// 数组
Object[] objArr = null;
ObjectUtils.isEmpty(objArr); // true
ObjectUtils中的isEmpty()这个方法可以对字符串,数组,Map集合,List集合进行是否等于null的判断
这个isEmpty方法为什么能判断这么多的数据类型,我们看下源码
public static boolean isEmpty(@Nullable Object obj) {
// 判断obj是否为null,如果是直接f
if (obj == null) {
return true;
}
// 判断obj是否是Optional的子类
if (obj instanceof Optional) {
// 如果是,则调用isPresent方法判断是否为null
return !((Optional) obj).isPresent();
}
// 判断obj是否是CharSequence的子类
if (obj instanceof CharSequence) {
// 如果是,则获取长度,长度等于0时,就认为这个obj是空字符串
return ((CharSequence) obj).length() == 0;
}
// 判断obj是否为数组
if (obj.getClass().isArray()) {
// 数组的长度等于0就认为这个数组是空数组
return Array.getLength(obj) == 0;
}
// 判断obj是否为Collection集合的子类
if (obj instanceof Collection) {
// 用Collection子类的isEmpty方法判断集合是否为空
return ((Collection) obj).isEmpty();
}
// 判断obj是否为Map接口的子类
if (obj instanceof Map) {
// 如果是,则进行强转,并用子类的isEmpty方法判断集合是否为空
return ((Map) obj).isEmpty();
}
// else
return false;
}
针对Map集合是否为空为null的判断
Map<String,Object> map = Collections.emptyMap();
CollectionUtils.isEmpty(map);
CollectionUtils工具类中isEmpty判断方法源码:
public static boolean isEmpty(@Nullable Map<?, ?> map) {
return map == null || map.isEmpty();
}
CollectionUtils工具类中还有针对List集合的isEmpty方法:
List<Integer> list = null;
// 使用CollectionUtils工具类判断list集合是否为空
CollectionUtils.isEmpty(list); // true
针对List集合的isEmpty源码
public static boolean isEmpty(@Nullable Collection<?> collection) {
return collection == null || collection.isEmpty();
}
标签:Map,逻辑,判断,java,return,isEmpty,obj,null
From: https://blog.csdn.net/juanmiao/article/details/145285220