带负值的即时加号



我有这样的代码

Instant now = Instant.now();
if (amountDays >= 0) {
now = now.plus(amountDays, ChronoUnit.DAYS);
} else {
now = now.minus(Math.abs(amountDays), ChronoUnit.DAYS);
}

我想把它简化成这样

Instant now = Instant.now();
now = now.plus(amountDays, ChronoUnit.DAYS);

然而,我不确定plus是否正确地工作与负值,或者如果这搞砸了结果。

我可以像那样使用plus,可能是负值吗?

plus为负值

plus方法支持添加负时间以返回时间,从它的文档:

amountToAdd -要添加到结果中的单位的数量,可以是负的

都很好,你可以这样使用它,它会像预期的那样工作。


实现小细节,minus的当前实现甚至将-amountToSubtract作为值委托给plus:

return (amountToSubtract == Long.MIN_VALUE
? plus(Long.MAX_VALUE, unit).plus(1, unit)
: plus(-amountToSubtract, unit));
指出

一般来说,如果你只是想回到过去,为了可读性,更喜欢使用minus

在您的特殊情况下,我会坚持只使用plus,但不要不必要地膨胀代码和逻辑。相反,更喜欢添加注释

// amountDays may be negative

或者确保你的javadoc是清楚的。

微小的改进,您可以将代码从两个语句简化为一个语句:

Instant now = Instant.now().plus(amountDays, ChronoUnit.DAYS);

看看minus是如何实现的

@Override
public Instant minus(long amountToSubtract, TemporalUnit unit) {
return (amountToSubtract == Long.MIN_VALUE ? plus(Long.MAX_VALUE, unit).plus(1, unit) : plus(-amountToSubtract, unit));
}
当然,为了可读性起见,在适当的情况下使用plusminus是有意义的,但检查amountDays是否比0更大或更低似乎是某种内部Instant.plus逻辑,并且绝对是对代码的可读性没有帮助

相关内容

  • 没有找到相关文章

最新更新