如何优雅的解决空指针?
一、介绍
在实际的系统运行过程中,难免会出现报NullPointerException空指针的错误,造成这样的本质原因就是数据或者对象为空,导致程序进一步执行的时候报错!
一般的常规解决办法也就是加一个if判断。
if(obj != null){
//doSomthing
如果出现需要判断的对象过多,难以避免的会出现很多对Null的判断语句,而这些语句一旦多起来,我们的代码就会变的惨不忍睹。
针对这种情况,我们可以引入了空对象模式以此来使我们的代码变的更优雅一点。
废话也不多说了,代码直接撸起来!
二、程序示例
下面,我们以获取从一个书籍库中获取书籍为例,实现过程如下!
先创建一个书籍抽象类AbstractBook,代码如下:
public abstract class AbstractBook {
protected String bookName;
//判断是否存在
public abstract boolean isExist();
//获取书名
public abstract String getName();
然后,创建一个具体实现类Book,如下:
public class Book extends AbstractBook {
public Book(String bookName) {
this.bookName = bookName;
@Override
public boolean isExist() {
return false;
@Override
public String getName() {
return bookName;
接着,创建一个空对象NullObjectBook,如下:
public class NullObjectBook extends AbstractBook {
@Override
public boolean isExist() {
return true;
@Override
public String getName() {
return "没有...";
同时,创建一个书籍获取工厂BookFactory,如下:
public class BookFactory {
public static final String[] names = {"java核心卷1", "java核心卷2", "软件随想录", "python入门"};
public static AbstractBook getBook(String bookName){
for (int i = 0; i < names.length; i++) {
if(names[i].equals(bookName)){
return new Book(bookName);
return new NullObjectBook();
最后,编写一个测试客户端,如下:
public class NullObjectClient {
public static void main(String[] args) {
AbstractBook book1 = BookFactory.getBook("java核心卷2");
AbstractBook book2 = BookFactory.getBook("python入门");
AbstractBook book3 = BookFactory.getBook("java编程思想");
AbstractBook book4 = BookFactory.getBook("软件随想录");
System.out.println(book1.getName());
System.out.println(book2.getName());
System.out.println(book3.getName());
System.out.println(book4.getName());
输出结果:
java核心卷2
python入门
没有...
软件随想录
从代码上可以看出,实现过程比较简单!
三、应用
空对象模式在编程中应用也很广,例如 google 的 guava 库提供了Optional类,可以有效的判断null对象。
Optional<Integer> possible = Optional.of(5);
possible.isPresent(); // returns true
possible.get(); // returns 5
在 jdk1.8 中也新增了Optional类,以提高程序的健壮性!
四、总结
在写代码的时候我们经常会遇到空指针,为了避免空指针的发生需要做一些判断。如果是复杂对象的话,还需要一层层地去判断。
巧妙的采用使用空对象模式,可以用于返回无意义的对象,从而承担处理null的责任,提升程序员的可读性!
五、参考
1、菜鸟教程 - 空对象模式
分类
标签
已于2022-9-7 15:15:00修改
收藏
回复
删除帖子
回复
添加资源
添加资源将有机会获得更多曝光,你也可以直接关联已上传资源
去关联
添加资源
相关推荐
-
C
指针
如何
修改const常量
laokugonggao
• 5981浏览
• 0回复
-
Flutter -
解决
混合开发iOS脚本打包遇到
的
问题
level
• 1.3w浏览
• 0回复
-
如何
看待9月10日华为发布
的
鸿蒙 OS 2.0 系统,应用前景
如何
?
韦东山
• 1.5w浏览
• 12回复
-
Android
如何
优雅
地向Fragment传递参数
kekenai
• 6666浏览
• 0回复
-
Android
如何
优雅
地向Fragment传递参数
柳随风
• 1.2w浏览
• 0回复
-
C/C++ 函数
指针
与
指针
函数
davisl
• 1.6w浏览
• 1回复
-
实战|
如何
消除又臭又长
的
if...else 判断更
优雅
的
编程?
detailtoo
• 3015浏览
• 0回复
-
在鸿蒙(HarmonyOS)环境下,
优雅
的
完成Http访问网络【教程】
ZZR老师
• 2.7w浏览
• 21回复
-
JDK1.8 新特性 (八):还在重复写
空
指针
检查代码?赶紧使用 Opt
新新人类
• 4027浏览
• 0回复
-
如何
解决
android studio常见安装完成后出现
的
问题
epeppanda
• 9217浏览
• 0回复
-
如何
优雅
地开发HarmonyOS APP应用
软通夏德旺
• 3.0w浏览
• 11回复
-
JDK 8 中通过optional类
解决
空
指针
异常,避免NPE
huatechinfo
• 1.1w浏览
• 0回复
-
[鸿蒙开发]鸿蒙开发踩坑一:WebView报
空
指针
甜甜爱开发
• 5555浏览
• 3回复
-
如何
解决
HarmonyOS sdk
的
bug--AlphabetIndexer组件
的
bug
解决
思路
软通夏德旺
• 9536浏览
• 1回复
-
社区贡献-
如何
解决
合入冲突
zhushangyuan_
• 2566浏览
• 1回复
-
#云原生征文# 程序员
如何
优雅
的
使用Google搜索
dstt_l3
• 5093浏览
• 1回复
-
EventMesh
如何
解决
SaaS组合式应用集成标准化问题
罗锦荣AlexLuo
• 8046浏览
• 14回复
-
Map+函数式接口方法
优雅
的
解决
if-else
Handpc
• 162浏览
• 0回复
-
策略+枚举
优雅
的
解决
if-else
lhlrj
• 161浏览
• 0回复
帖子
视频