你认为哪个更好(当然有争论):
Optional.ofNullable( userName )
.ifPresent( nonNullUserName -> header.setUser( createUser( nonNullUserName ) ) );
or
header.setUser( userName == null ? createUser( userName ) : null );
方法createUser
创建 xml 元素,整个代码的目的是根据是否存在将其设置在 SOAP 请求中userName
.
我看到的第一种方法的好处是没有无用的操作,代码只做一件事,仅此而已。但第二种方法可以让您多保存一行代码,从而显得更加简洁。
UPDATE:我想我错过了我实际上暗示的一件事,这引起了一定的误解。如果有的话,最好提供更清晰的示例和解释。
可选被设计用作不能总是返回值的方法的返回类型,例如getFirstElementOfAList()
,如果列表为空,则不能返回任何其他内容:返回 null 比返回空的Optional 更不清楚,并且可能意味着第一个元素为 null,而不是没有第一个元素。
设计者并不打算将Optional 用作链方法的便捷构造。看斯图尔特·马克斯的演讲 https://www.youtube.com/watch?v=Ej0sss6cq14(从事 JDK 工作的人),尤其是他在第 28 分钟所说的话:
出于链接方法的特定目的创建可选通常是一个坏主意[...]
您当然可以不尊重预期的设计和最佳实践,但您的同事也可能因此而讨厌您:-)
请注意,您发布的两个片段不执行相同的操作。如果用户名为 null,第一个不执行任何操作,而第二个将用户设置为 null(这可能会引发异常或覆盖以前的值)
我只会使用(假设你想要的是第一个版本):
if (userName != null) {
header.setUser(createUser(userName));
}
这非常清楚,不会滥用Optional,并且不会创建Optional实例只是为了链接方法。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)