NPE向来是一个让java程序员头疼的问题,如何优雅的处理它?
判空灾难
首先想到的肯定是判空,增加代码健壮性,但带来的问题是,代码里大量的充斥着
及其不优雅,如何解决找个问题?
善用轮子
对于各种判空,前辈们已经造好了很多轮子,下面就是我的一些用到的,有其他的大家评论区见(会同步更新到文章)加粗为最常用的
- String类型判空
对于字符串类型的判空就有很多了如:
- 谷歌的guava的Strings
-
最常用的apache的StringUtils
- spring 的StringUtils(可以判断对象)
- 对象类型判空
对象类型的判空除了上边那个外还有:
-
java.util的Object
- spring的ObjectUtils
- apache的ObjectUtils(lang3版本)
- 集合类判空
集合类包含判空和判断内容是否为空
-
apache的CollectionUtils
- spring的CollectionUtils
- java自带的isEmpty(只能判断没有值)
- Map判空
- apache的MapUtils
使用java8的Optional
java8引入了对空对象的操作,直接避免了空指针异常,但其应用范围没有那么广,适应与对空值的处理,但并不适用于一些if-else的情况,所以其无法彻底代替if-else
- 最常用的
使用Optional.ofNullable()来包装一个可能为空的对象
使用orElseGet或者orElse来处理空值 - 示例