这篇文章简要介绍了Java 8的最有用但“毫不费力”的功能。

程序员花了无尽的时间来尝试纠正最常见但最危险的错误之一-空指针异常。


空指针异常可能导致我们的应用程序意外中断,并且很难预先检测到。

在许多情况下,当我们使用外部库和API时,由于库/ API返回的值,空指针可能会出现。

由于这个原因,异常处理和从异常中进行逻辑恢复对于程序员来说是一项复杂的任务。

这需要高级程序员来检查代码,并定义控制流以进行错误恢复。

在Java 8中,添加了新的API –即“ Optional ”类,以帮助开发人员创建一个框架,以完全避免使用空指针,并为其应用程序定义第一级异常恢复策略。

明确地说–

Optional API提供了一个容器类,该容器类可用于包装方法调用的返回值-即使它们包含“空”值。

它还提供了API,使程序员能够定义默认值,以便在遇到“ null”时返回。 这迫使开发人员在编码时考虑针对空值的缓解策略。

空检查可以通过两种方式执行–通过“ isPresent”和“ ifPresent”方法。

当我们调用“ isPresent ”时,如果存在非null值,则将返回“ true”。

另一方面,除了只检查该值是否为非null之外,如果我们希望将控制流委托给同一API调用中的另一个类,则可以使用“ ifPresent”方法。

此方法采用类型为“ Consumer ”的参数-本质上是一个功能接口。 可以通过应用程序中的类来实现此接口。

每当调用“ ifPresent ”时,我们都必须传递Consumer接口的实现,以便可以自动完成控制流委派。

从开发人员的角度来看–消费者的实现可以定义当存在非null值时要采取的措施。

此类还具有其他有用的功能,程序员可以使用这些功能来避免样板代码。

过滤器函数接受Predicate类型的参数。 如果返回值与谓词匹配,则返回过滤后的值,否则返回空的Optional对象。

在相似的行上,我们还有其他函数可以调用以组织返回值。 考虑地图功能和平面 地图功能。

这两个函数均用于为返回值(如果存在)创建键-值对映射。

开发人员还可以根据逻辑标准的评估来定义返回值。

例如,考虑以下功能–

如果返回值为null,则orElse函数将在参数中返回提供的值

orElseGet返回值(如果存在)。 否则,如果不存在,它将调用Supplier类型的参数以返回自定义值。

orElseThrow启用对异常处理的细粒度控制。 如果没有返回值,则可以引发自定义异常,或者可以将控制的飞行委托给Supplier类型-这又可以决定要抛出的异常。

总之,使用此API –我们可以在整个软件开发生命周期中受益

软件架构师可以通过标准化异常处理来减少代码审查周期。

质量检查工程师可以报​​告较少的由空指针异常引起的错误。

软件设计人员可以预先考虑其异常处理逻辑,避免以后再进行愚蠢的修补。

开发人员最终将编写更有效的代码,从而缩短产品上市时间。

翻译自: https://www.javacodegeeks.com/2019/04/eliminating-pointer-exceptions-java-applications.html

从Java应用程序中消除Null指针异常相关推荐

  1. 程序中抛出空指针异常_从Java应用程序中消除空指针异常

    程序中抛出空指针异常 这篇文章简要介绍了Java 8的最有用但又"毫不夸张"的功能. 程序员花费了无尽的时间来纠正最常见但最危险的错误之一,即Null指针异常. 空指针异常会导致我 ...

  2. 生产Java应用程序中的十大异常类型-基于1B事件

    Pareto记录原理:97%的记录错误语句是由3%的唯一错误引起的 在最新的数据整理帖子之后,我们收到了很多反馈和问题,在该文章中,我们显示97%的记录错误是由10个唯一错误引起的 . 根据普遍的需求 ...

  3. java中什么时候应用异常_生产Java应用程序中的十大异常类型-基于1B事件

    java中什么时候应用异常 Pareto记录原理:97%的记录错误语句是由3%的唯一错误引起的 在最新的数据整理帖子之后,我们收到了很多反馈和问题,我们发现97%的记录错误是由10个唯一错误引起的 . ...

  4. 在 Java 应用程序中使用 Elasticsearch: 高性能 RESTful 搜索引擎和文档存储快速入门指南

    如果您使用过 Apache Lucene 或 Apache Solr,就会知道它们的使用体验非常有趣.尤其在您需要扩展基于 Lucene 或 Solr 的解决方案时,您就会了解 Elasticsear ...

  5. elastic search java_在 Java 应用程序中使用 Elasticsearch

    如果您使用过 Apache Lucene 或 Apache Solr,就会知道它们的使用体验非常有趣.尤其在您需要扩展基于 Lucene 或 Solr 的解决方案时,您就会了解 Elasticsear ...

  6. java程序中用户名和密码_在Java应用程序中使用密码术

    java程序中用户名和密码 这篇文章描述了如何使用Java密码体系结构 (JCA),该体系结构使您可以在应用程序中使用密码服务. Java密码体系结构服务 JCA提供了许多加密服务,例如消息摘要和签名 ...

  7. Java应用程序中的内存泄漏和内存管理

    Java平台最突出的功能之一是其自动内存管理. 许多人错误地将此功能转换为Java中没有内存泄漏 . 但是,事实并非如此,我给人的印象是,现代Java框架和基于Java的平台,尤其是Android平台 ...

  8. 在Java应用程序中使用密码学

    这篇文章描述了如何使用Java密码体系结构 (JCA),该体系结构使您可以在应用程序中使用密码服务. Java密码体系结构服务 JCA提供了许多加密服务,例如消息摘要和签名 . 这些服务可以通过特定于 ...

  9. Java应用程序中的SQL注入

    在本文中,我们将讨论什么是SQL注入攻击. 以及它如何影响任何Web应用程序使用后端数据库. 在这里,我专注于Java Web应用程序. 开放Web应用程序安全项目(OWAP)列出了SQL注入是Web ...

最新文章

  1. python最大公约数和最小公倍数的求法_最大公约数和最小公倍数的求法分析
  2. YOLO-v5训练自己的数据+TensorRT推理部署(2)
  3. mysql sql 语句事务_MySQL: 3、SQL语言 ②约束、事务
  4. 乐视云没创意,还拿“免费”说事儿
  5. 一步步编写操作系统 14 CPU与外设通信——IO接口 上
  6. linux消息总线日志,linux – 解密继续mpt2sas系统日志消息
  7. Windows Terminal 已上架,快尝鲜
  8. cgroup学习(四)——mount hierarchy
  9. mysql读mdf_mdf文件如何导入MySQL数据库?
  10. vue在线预览word踩坑日记
  11. QTreeWidget支持双击编辑Item节点的内容
  12. 巴特沃斯(Butterworth)滤波器(二)
  13. 查看、修改 nginx分布服务器ip
  14. HTB-baby BoneChewerCon
  15. 【回归预测】基于TPA-LSTM(时间注意力注意力机制长短期记忆神经网络)实现数据多输入单输出回归预测附matlab代码
  16. 基于 SQL SERVER 的分布式数据库设计与实现
  17. 3.依赖注入setter注入和构造器注入
  18. GANSYNTH(基于对抗性神经网络的音频合成)
  19. 多伦多大学统计学转计算机科学,盘点!世界TOP30大学对A-Level、IBDP成绩的详细要求!...
  20. 扁鹊见王的故事——《重构》前言

热门文章

  1. 【2018.3.31】模拟赛之二-ssl2407 负进制【贪心】
  2. 【DP】和谐的奶牛(jzoj 1750)
  3. Nacos(九)之Dubbo 融合 Nacos 成为注册中心
  4. MySQL substring()函数
  5. JDK8新特性之Optional
  6. 阿里巴巴对Java编程【异常处理】的规约
  7. Zookeeper面试题锦集
  8. 如何用spring boot写一个注册页面
  9. Servlet使用适配器模式进行增删改查案例(Dept.java)
  10. 并查集判断是否有环存在