【发布时间】:2019-05-21 09:28:58
【问题描述】:
您好,我有两个代码示例
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+,那么性能损失是多少?
提前致谢
【问题讨论】:
-
我个人觉得链接更容易阅读 - 但我的同事认为我很奇怪,所以 这取决于 我猜。性能方面,这与您 99% 无关;除非分析器证明不是这样
-
是否值得重构代码的可读性与性能,或者是对选项的滥用?这取决于您的需求
-
如果你不知道premature optimization是什么,请查一下。
-
仅供参考,Java 9 有
Optional#or方法来避免你正在做的wrap。 -
@wilmol
or很好,但在这种情况下并不能将您从wrap中拯救出来。语法为return wrap(message.getA()) .or(() -> wrap(message.getB())) .or(() -> wrap(message.getC())) .orElse(null);。括号的放置略有不同。wrap使用相同。
标签: java performance if-statement java-8 optional