仅当当前日期大于lastModifiedDate时,我想将lastModifiedDate更新为当前日期并执行一些操作。
但是我担心第一次在执行条件条件时会在if条件内的“ dateToday.isAfter(lastModifiedDate.get("lastUpdated"))
”附近获取NullPointerException,因为在HashMap中还没有“ lastUpdated”键的键值对。下面是代码。
import java.util.HashMap;
import org.joda.time.DateTimeZone;
import org.joda.time.LocalDate;
public class TestDate {
static HashMap<String, LocalDate> lastModifiedDate = new HashMap<>();
static int unityResponsesCount;
public void resetUnityResponsesCount() {
unityResponsesCount = 0;
}
/**
* @param args
*/
public static void main(String[] args) {
LocalDate dateToday = LocalDate.now(DateTimeZone.getDefault());
if (lastModifiedDate.isEmpty() || dateToday.isAfter(lastModifiedDate.get("lastUpdated"))) {
lastModifiedDate.put("lastUpdated", dateToday);
TestDate testDate = new TestDate();
testDate.resetUnityResponsesCount();
}
}
}
在运行之前,我调试了代码,仅检查“ dateToday.isAfter(lastModifiedDate.get("lastUpdated"))
”时,我得到了
java.lang.IllegalArgumentException:部分不能为null org.joda.time.base.AbstractPartial.isAfter(AbstractPartial.java:351) 在org.theorem.scan.qa.util.TestDate.main(TestDate.java:25)
但是,如果我检查完整的if语句lastModifiedDate.isEmpty() || dateToday.isAfter(lastModifiedDate.get("lastUpdated"))
,则会得到“ TRUE” 。
如果此IF语句产生Exception,则应该在每个lastModifiedDate.put("lastUpdated", dateToday);
内部分配相同条件的if条件。
我很惊讶,如果有条件,如何在内部自动处理IllegalArgumentException。
答案 0 :(得分:1)
这种情况
(lastModifiedDate.isEmpty() || dateToday.isAfter(lastModifiedDate.get("lastUpdated")))
正在使用短路OR运算符||
。
这意味着lastModifiedDate.isEmpty()
首先被评估,如果为真,则{em> not 被评估dateToday.isAfter(lastModifiedDate.get("lastUpdated"))
,因此不会引发异常。整个表达式被认为是真实的。