gpt4 book ai didi

java - Java 8 ifPresent与三元运算符

转载 作者:行者123 更新时间:2023-12-04 17:21:13 25 4
gpt4 key购买 nike

您认为哪个更好(当然要带参数):

Optional.ofNullable( userName )
.ifPresent( nonNullUserName -> header.setUser( createUser( nonNullUserName ) ) );


要么

header.setUser( userName == null ? createUser( userName ) : null );


方法 createUser创建xml元素,整个代码的目的是根据 userName的存在将其设置在SOAP请求中。

我看到的第一种方法的好处是没有无用的操作,代码只做一件事,而不再做。但是第二种方法可以让您多保存一行代码,从而显得更加简洁。

更新:我想我错过了我实际上暗示的事情,这引起了一定的误解。如果有的话,最好提供更干净的示例并提供解释。

最佳答案

Optional被设计为用作不能总是返回值的方法的返回类型,例如getFirstElementOfAList(),如果列表为空,则不能返回其他任何值:返回null不会比返回一个空可选,可能意味着第一个元素为null,而不是没有第一个元素。

设计人员不打算将Optional用作链接方法的便捷构造。请参见the presentation by Stuart Marks(在JDK上工作的人),尤其是他在第28分钟所说的话:


为链接方法的特定目的而创建一个Optional通常是个坏主意[...]


您当然可以不尊重预期的设计和最佳实践,但是您的同事也可以为此而讨厌您:-)

请注意,您发布的两个摘要功能不同。如果用户名为空,则第一个不执行任何操作,而第二个将用户设置为空(这可能会引发异常或覆盖先前的值)

我会用(假设您想要的是第一个版本):

if (userName != null) { 
header.setUser(createUser(userName));
}


这非常清楚,不会滥用Optional,也不会创建Optional实例只是为了链接方法。

关于java - Java 8 ifPresent与三元运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43696444/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com