哪种空检查更可取?
Optional.ofNullable(port).ifPresent(settings::setPort);
或
if (port != null) {
settings.setPort(port);
}
最佳答案
在 Java 中,Optional
值是指示存在或不存在的位与任意引用类型 T
或原始 的值的融合int
、long
或 double
。
当从方法返回值时,融合它们特别有用,因为方法只有一个返回值。通常需要使用一个特殊的值,例如在引用类型的情况下使用 null
,或者在 int
的情况下使用 -1,作为指示“无-值”的情况。使用 Optional
作为返回值可以避免调用者不小心误用 sentinel 值作为真正的返回值的问题。
鉴于此,代码行如
Optional.ofNullable(port).ifPresent(settings::setPort);
的奇怪之处在于它在该行的第一部分将一个值与存在/不存在的位融合,然后立即在该行的第二部分将它们分开。这给原本相当简单的任务增加了复杂性:检查 port
是否为非空并有条件地执行某些操作。替代代码片段:
if (port != null) {
settings.setPort(port);
}
非常清楚地准确表达了它的作用。
的确,if 语句比 Optional
链占用更多的垂直空间。 Optional
链更密集,但也更难理解:一个糟糕的权衡。
关于java - Optional.ofNullable() 是否应该用于空检查?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52038417/