这篇文章简要介绍了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