如何在“如果”条件下自动处理IllegalArgumentException

时间:2019-04-03 08:59:38

标签: java if-statement exception illegalargumentexception

仅当当前日期大于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。

1 个答案:

答案 0 :(得分:1)

这种情况

(lastModifiedDate.isEmpty() || dateToday.isAfter(lastModifiedDate.get("lastUpdated")))

正在使用短路OR运算符||

这意味着lastModifiedDate.isEmpty()首先被评估,如果为真,则{em> not 被评估dateToday.isAfter(lastModifiedDate.get("lastUpdated")),因此不会引发异常。整个表达式被认为是真实的。