java业务逻辑判断

      在平时的业务开发中,空指针出现的频率是比较高的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();
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值