NPE向来是一个让java程序员头疼的问题,如何优雅的处理它?

判空灾难

首先想到的肯定是判空,增加代码健壮性,但带来的问题是,代码里大量的充斥着
再见NPE之“优雅判空”
及其不优雅,如何解决找个问题?

善用轮子

对于各种判空,前辈们已经造好了很多轮子,下面就是我的一些用到的,有其他的大家评论区见(会同步更新到文章)加粗为最常用的

  • String类型判空
    对于字符串类型的判空就有很多了如:
  1. 谷歌的guava的Strings
    再见NPE之“优雅判空”
  2. 最常用的apache的StringUtils
    再见NPE之“优雅判空”
  3. spring 的StringUtils(可以判断对象)
    再见NPE之“优雅判空”
  • 对象类型判空
    对象类型的判空除了上边那个外还有:
  1. java.util的Object
    再见NPE之“优雅判空”
  2. spring的ObjectUtils
    再见NPE之“优雅判空”
  3. apache的ObjectUtils(lang3版本)
    再见NPE之“优雅判空”
  • 集合类判空
    集合类包含判空和判断内容是否为空
  1. apache的CollectionUtils
    再见NPE之“优雅判空”
  2. spring的CollectionUtils
    再见NPE之“优雅判空”
  3. java自带的isEmpty(只能判断没有值)
    再见NPE之“优雅判空”
  • Map判空
  1. apache的MapUtils
    再见NPE之“优雅判空”

使用java8的Optional

java8引入了对空对象的操作,直接避免了空指针异常,但其应用范围没有那么广,适应与对空值的处理,但并不适用于一些if-else的情况,所以其无法彻底代替if-else

  • 最常用的
    使用Optional.ofNullable()来包装一个可能为空的对象
    使用orElseGet或者orElse来处理空值
  • 示例

相关文章: