小编典典

捕获NullPointerException是一件非常有问题的事情,因为它们几乎可以在任何地方发生。从错误中获取一个错误,意外地捕获它,然后像一切正常一样继续进行非常容易,从而隐藏了一个真正的问题。处理起来非常棘手,因此最好完全避免。(例如,考虑对null进行自动拆箱Integer。)

我建议你改用Optional该类。当你要使用存在或不存在的值时,这通常是最好的方法。

使用它,你可以这样编写代码:

public Optional m(Ws wsObject) {

return Optional.ofNullable(wsObject.getFoo()) // Here you get Optional.empty() if the Foo is null

.map(f -> f.getBar()) // Here you transform the optional or get empty if the Bar is null

.map(b -> b.getBaz())

.map(b -> b.getInt());

// Add this if you want to return an -1 int instead of an empty optional if any is null

// .orElse(-1);

// Or this if you want to throw an exception instead

// .orElseThrow(SomeApplicationException::new);

}

为什么可选?

使用Optionals代替null可能不存在的值使事实对于读者来说非常明显和清楚,并且类型系统将确保你不会意外忘记它。

你还可以访问更方便地使用这些值的方法,例如map和orElse。

缺席有效还是错误?

但是还要考虑中间方法返回null是否是有效结果,或者这是错误的征兆。如果始终是错误,则抛出异常可能比返回特殊值或使中间方法本身抛出异常更好。

也许还有更多可选件?

另一方面,如果中间方法中缺少的值仍然有效,也许你也可以将Optional它们切换为s?

然后,你可以像这样使用它们:

public Optional mo(Ws wsObject) {

return wsObject.getFoo()

.flatMap(f -> f.getBar())

.flatMap(b -> b.getBaz())

.flatMap(b -> b.getInt());

}

为什么不选?

我能想到的不使用的唯一原因Optional是,这是否在代码的性能关键部分,以及垃圾回收的开销是否是一个问题。这是因为Optional每次执行代码时都会分配一些对象,而VM 可能无法对其进行优化。在这种情况下,你的原始if测试可能会更好。

2020-03-22

java 捕获 nullpointerexception,Java 空检查链与捕获NullPointerException相关推荐

  1. 【深入kotlin】 - 与Java互操作:java调用kotlin

    Java 调用 kotlin 属性 Kotlin 类的一个属性编译后,会产生 3 种 Java 对象: get 方法,getXxx set 方法,setXxx 私有字段,字段名与 kotlin 属性名 ...

  2. java中避免空指针_在Java中避免空检查

    java中避免空指针 对于Java开发人员(从初级到专家)最糟糕的噩梦之一是空对象引用检查. 我很确定您已经看过几次这样的代码: public void addAddressToCustomer(Cu ...

  3. 在Java中避免空检查

    对于Java开发人员(从初级到专家)最糟糕的噩梦之一是空对象引用检查. 我很确定您已经看过几次这样的代码: public void addAddressToCustomer(Customer cust ...

  4. java 多态判断非空_收藏Java 面试题全梳理

    脚本之家 你与百万开发者在一起 来源 | Java建设者(ID:javajianshe) 作者 |cxuan 如若转载请联系原公众号 Java 基础篇 Java 有哪些特点 并发性的:你可以在其中执行 ...

  5. Java异常处理学习笔记(抛出、捕获、finally、异常传播、NPE、断言、日志)

    Java中的异常是什么? Java异常本质上一种class,继承关系如下图所示,Error是严重的错误,程序无能为力,RuntimeException是在运行过程中发生的异常,其余的异常在编写程序的时 ...

  6. 用java写一个简单的区块链(下)

    用java写一个简单的区块链(下) 2018年03月29日 21:44:35 java派大星 阅读数:725 标签: 区块链java 更多 个人分类: 区块链 版权声明:本文为博主原创文章,转载请标明 ...

  7. 抑制java对修饰符的检查_Java 7对抑制异常的支持

    抑制java对修饰符的检查 在JDK 7中 ,向Throwable类( Exception和Error类的父类)添加了一个新的构造函数和两个新方法. 添加了新的构造函数和两个新方法以支持"抑 ...

  8. java怎么捕捉除数异常_Java异常的捕获及处理---小总结

    一:异常的基本概念 二:异常的基本处理格式 三:异常的继承结构 四:Java的异常处理机制 五:throws和throw关键字的作用 六:Exception和RunntimeException的区别 ...

  9. java runnable 异常_JAVA 线程中的异常捕获

    在java多线程程序中,所有线程都不允许抛出未捕获的checked exception(比如sleep时的InterruptedException),也就是说各个线程需要自己把自己的checked e ...

最新文章

  1. 修改系统tabbar的高度
  2. 【正一专栏】梅西、内马尔分开明天会更好
  3. windows10安装python环境_在windows10下安装python(配置环境变量),Windows10
  4. STM32开发 -- 启动流程
  5. VisualVM远程监控Java
  6. yum安装好的php路径,yum安装php的路径是什么_后端开发
  7. TokenInsight:反映区块链行业整体表现的TI指数较昨日同期上涨2.56%
  8. 关于Oracle分区的一篇文章
  9. GPS数据格式的分析与处理
  10. 【知识整理】Nmap与Masscan
  11. 如何将wav转为mp3格式,wav中间mp3步骤
  12. 怎么获取自定义核算项目里某一个类型的数据:做f7
  13. d3.js 旋转图形_视觉效果和动态图形软件After Effects 2019 v16.1.3.5 Win/Mac 中文/英文/多语言破解版...
  14. 《iVX 高仿美团APP制作移动端完整项目》05 美食页商家推荐内容、分类、推荐商家制作
  15. 改变屏幕显示方向,让屏幕显示旋转
  16. js实现oss批量下载文件_jquery批量下载文件
  17. 如何提升Google排名?
  18. 4/20 Fizz Buzz(412)
  19. 【Android Camera1】Camera1 Parameters参数详解(一)—— Size (preview/picture/thumbnail)
  20. 学渣之路:一个月拯救我英语四级

热门文章

  1. 51nod1812树的双直径(换根树DP)
  2. leetcode -- 36.有效的数独
  3. CodeForces Contest #1114: Round #538 (Div. 2)
  4. 阿里云构建Jenkins服务
  5. 黑马程序员--里氏转换
  6. 加速度传感器与车祸报警解决方案
  7. C语言经典回溯算法之解决数的组合问题(详解)
  8. 模拟电子技术不挂科学习笔记3(放大电路的分析方法)
  9. 代码管理_阿里巴巴如何管理代码分支?
  10. Python+Matplotlib绘制带误差线的柱状图