你好,我有两个代码示例
if/else if/else 语句
private Object getObj(message) {
if (message.getA() != null)
return message.getA();
else if (message.getB() != null)
return message.getB();
else if (message.getC() != null)
return message.getC();
else return null;
}
可选语句
private Optional<Object> wrap(Object o){
return Optional.ofNullable(o);
}
private Object getObj(message) {
return wrap(message.getA())
.orElseGet(() -> wrap(message.getB())
.orElseGet(() -> wrap(message.getC())
.orElse(null)));
}
所以我的问题是这两者在性能方面的比较(我在实际代码中有大约 15-20 个 if-else 语句)?
是否值得重构代码的可读性和性能,或者是对可选值的滥用?
如果 if/else-if 语句增长到 100+,性能损失是多少?
提前致谢
最佳答案
不要将Optional
用于条件逻辑。
它们的设计,to be returned from a method to indicate a potentially absent value .
仅仅因为您可以很好地将它们链接成一行并不意味着它是可以理解的。而且你实际上一无所获。性能开销可能很大。在最坏的情况下 N
对象被创建然后被丢弃。只需使用您的“正常”if-else
链即可。
与其想方设法让您当前的代码更具可读性,不如退后一步问问自己,为什么您需要 15-20 个 if-else 语句。你能分解一些逻辑吗?为什么首先需要一个 getter 来处理这么多可能具有不同类型的不同字段?等等
关于java - 可选 vs if/else-if 性能 java 8,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56235254/