此问题已在此处找到答案:
基于条件声明最终变量,并在java中的lambda中使用它[duplicate](3个答案)
四天前关门。
我想知道是否有什么好的技术可以使下面的代码更干净。
final Optional<Long> historyHours1;
final Optional<Double> historyHours2;
final Optional<Float> historyHours3;
if (parameters.isPresent()) {
historyHours1 = // some logic
historyHours2 = // some logic
historyHours3 = // some logic
} else {
historyHours1 = Optional.empty();
historyHours2 = Optional.empty();
historyHours3 = Optional.empty();
}
希望保持变量不变吗 final
,并使用一些技术来替换if-else。考虑使用方法进行计算并返回包含there变量的对象,但将there变量组合到一个对象中,这是不可取的。
2条答案
按热度按时间pvcm50d11#
您可能不想使用
Optional
最后的三个变量。Optional
,OptionalDouble
及OptionalLong
对于可能不存在的返回值,通常是非常好的。对于20行或更短的方法中的局部变量,它们实际上不会给您带来任何好处。根据我的口味,这同样适用于final
,但我承认这里的观点更为多样。如果你愿意,我的建议是
final
变量):重写的代价是我们要测试三次您的参数是否存在。这可能很好,但你需要自己称一下。
万一你坚持
Optional
,同样的想法也适用:其他变量也类似。使用
OptionalDouble
及OptionalLong
. 及Optional<Float>
既然没有OptionalFloat
班级。即使是拆箱到OptionalLong
或OptionalDouble
我们需要通过一个流,如代码行所示。取决于您将使用的
historyHoursX
变量也有可能是一次重写,涉及到这是可能的,也是一次重写,利用parameters
作为一个Optional
(当我猜对的时候)。因此,您可能希望向我们展示更多现有代码。uelo1irk2#
当您可能添加更多其他条件时,使用开关可能会有所帮助。