【发布时间】:2022-11-18 20:28:55
【问题描述】:
因此,我目前正在研究一个函数,用于检查给定的 LocalTime 是否在范围内。一切都很好,LocalDateTime 的等价物可以正常工作。
所以,我的代码现在看起来像这样:
public boolean isInRange(LocalTime time){
return (time.isAfter(roundedStartTime.toLocalTime())) || time.equals(roundedStartTime.toLocalTime()) &&
time.isBefore(roundedEndTime.toLocalTime());
}
它有一些关于我的业务逻辑的细节,但这不是问题的一部分。我还有附带的 junit 测试,用于检查逻辑是否按预期工作。同样,inRange(LocalDateTime time) 函数可以完美运行。
但是使用我的测试,同时我使用LocalDateTime确认,它们失败了,因为它们以某种方式返回 true。我已经开始调试,不敢相信自己的眼睛,这解释了 true && falsecheck:
无论出于何种原因,分别评估这两个语句会显示预期的行为,但将它们组合起来会返回 true。
【问题讨论】:
-
如果您希望您的条件被评估为
(A || B) && C,则需要设置适当的括号。目前它被评估为A || (B && C),因为&& 的优先级高于||。意思是一旦第一个条件为真,一切都为真,甚至因为短路而没有被评估。 -
哇,我怎么错过了,我太早关闭了括号。谢谢!
标签: java validation debugging localtime