java 捕获 nullpointerexception,Java 空检查链与捕获NullPointerException
小编典典
捕获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相关推荐
- 【深入kotlin】 - 与Java互操作:java调用kotlin
Java 调用 kotlin 属性 Kotlin 类的一个属性编译后,会产生 3 种 Java 对象: get 方法,getXxx set 方法,setXxx 私有字段,字段名与 kotlin 属性名 ...
- java中避免空指针_在Java中避免空检查
java中避免空指针 对于Java开发人员(从初级到专家)最糟糕的噩梦之一是空对象引用检查. 我很确定您已经看过几次这样的代码: public void addAddressToCustomer(Cu ...
- 在Java中避免空检查
对于Java开发人员(从初级到专家)最糟糕的噩梦之一是空对象引用检查. 我很确定您已经看过几次这样的代码: public void addAddressToCustomer(Customer cust ...
- java 多态判断非空_收藏Java 面试题全梳理
脚本之家 你与百万开发者在一起 来源 | Java建设者(ID:javajianshe) 作者 |cxuan 如若转载请联系原公众号 Java 基础篇 Java 有哪些特点 并发性的:你可以在其中执行 ...
- Java异常处理学习笔记(抛出、捕获、finally、异常传播、NPE、断言、日志)
Java中的异常是什么? Java异常本质上一种class,继承关系如下图所示,Error是严重的错误,程序无能为力,RuntimeException是在运行过程中发生的异常,其余的异常在编写程序的时 ...
- 用java写一个简单的区块链(下)
用java写一个简单的区块链(下) 2018年03月29日 21:44:35 java派大星 阅读数:725 标签: 区块链java 更多 个人分类: 区块链 版权声明:本文为博主原创文章,转载请标明 ...
- 抑制java对修饰符的检查_Java 7对抑制异常的支持
抑制java对修饰符的检查 在JDK 7中 ,向Throwable类( Exception和Error类的父类)添加了一个新的构造函数和两个新方法. 添加了新的构造函数和两个新方法以支持"抑 ...
- java怎么捕捉除数异常_Java异常的捕获及处理---小总结
一:异常的基本概念 二:异常的基本处理格式 三:异常的继承结构 四:Java的异常处理机制 五:throws和throw关键字的作用 六:Exception和RunntimeException的区别 ...
- java runnable 异常_JAVA 线程中的异常捕获
在java多线程程序中,所有线程都不允许抛出未捕获的checked exception(比如sleep时的InterruptedException),也就是说各个线程需要自己把自己的checked e ...
最新文章
- 修改系统tabbar的高度
- 【正一专栏】梅西、内马尔分开明天会更好
- windows10安装python环境_在windows10下安装python(配置环境变量),Windows10
- STM32开发 -- 启动流程
- VisualVM远程监控Java
- yum安装好的php路径,yum安装php的路径是什么_后端开发
- TokenInsight:反映区块链行业整体表现的TI指数较昨日同期上涨2.56%
- 关于Oracle分区的一篇文章
- GPS数据格式的分析与处理
- 【知识整理】Nmap与Masscan
- 如何将wav转为mp3格式,wav中间mp3步骤
- 怎么获取自定义核算项目里某一个类型的数据:做f7
- d3.js 旋转图形_视觉效果和动态图形软件After Effects 2019 v16.1.3.5 Win/Mac 中文/英文/多语言破解版...
- 《iVX 高仿美团APP制作移动端完整项目》05 美食页商家推荐内容、分类、推荐商家制作
- 改变屏幕显示方向,让屏幕显示旋转
- js实现oss批量下载文件_jquery批量下载文件
- 如何提升Google排名?
- 4/20 Fizz Buzz(412)
- 【Android Camera1】Camera1 Parameters参数详解(一)—— Size (preview/picture/thumbnail)
- 学渣之路:一个月拯救我英语四级