巧用Optional摆脱NullPointExcept的折磨
配景在Java中,假如你实行对null做函数挪用,就会激发NullPointerException(NPE),NPE是Java措施开拓中的最典范的非常,对付Java开拓者来说,无论你是初出茅庐的新人和还事变多年的老司机,NPE常常让他们翻车。为了停止NPE,他们会加许多if判定语句,使得代码的可读性变得很差。 从软件计划的角度来看,null自己是没故意义的语义,这是一种对缺失变量值的错误的建模。 从Java范例体系的角度看,null可以被赋值给任何范例的变量,而且不绝被转达,知道最后谁也不知道它是从那边引入的。 Optional的引入 Java计划者从Haskell和Scala中获取灵感,在Java 8中引入了一个新的类 java.util.Optional<T>。假如一个接口返回Optional,可以暗示一小我私人也许有车也也许没有车,这个比简朴的返回Car要更明晰,阅读代码的人不必要提前筹备营业常识。 Optional的目标就在于此:通过范例体系让你的规模模子中潜匿的常识显式地表此刻你的代码中。 Optional的行使 ![]() 上面这张内外罗列了Optional的基本API,我这里罗列了一些行使的tips:
![]()
![]()
![]()
![]()
拭魅战案例行使器材类要领改善也许抛出非常的API Java要领处理赏罚非常功效的方法有两种:返回null(或错误码);抛出非常,譬喻:Integer.parseInt(String)这个要领——假如无法理会到对应的整型,该要领就抛出一个NumberFormationException,这种环境下我们一样平常会行使try/catch语句处理赏罚非常环境。 一样平常我们提议将try/catch块单独提取到一个要领中,在这里行使Optional计划这个要领,代码如下。在开拓中,可以实行构建一个OptionalUtility器材类,将这些伟大的try/catch逻辑封装起来。 ![]() 综合案例此刻有个要领,是实行从一个属性映射中获取某个要害词对应的值,例子代码如下: ![]() 行使Optional的写法后,代码如下所示: ![]() 假如必要会见的属性值不存在,Properites.getProperty(String)要领的返回值就是一个null,行使noNullable工场要领就可以将该值转换为Optional工具;接下来,可以行使flatMap将一个Optional<String>转换为Optional<Integer>工具;最后行使filter过滤掉负数,然后就可以行使orElse获取属性值,假如拿不到则返回默认值0。 总结行使Optional的思绪和Stream沟通,都是链式思绪,跟数据库查询似的,表达力很强,并且省去了哪些伟大的try/catch和if-then-else要领。在后头的开拓中,可以行使Optional计划API,这样可以计划出更安详的接口和要领。 【编辑保举】
点赞 0 (编辑:湖南网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |