Я хотел обновить lastModifiedDate до текущей даты и выполнить какое-то действие, только если текущая дата больше, чем lastModifiedDate.
Но меня беспокоило получение исключения NullPointerException вблизи "dateToday.isAfter(lastModifiedDate.get("lastUpdated"))
" внутри условия if, когда выполняется в первый раз, потому что нет пары ключ-значение для ключа "lastUpdated", пока в HashMap.Ниже приведен код.
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:Частичное не может быть нулевым в 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"))
, я получу "ИСТИНА" .Если этот оператор IF дал исключение, я должен был предоставить отдельные условия с одним и тем же присваиванием внутри каждого из них, lastModifiedDate.put("lastUpdated", dateToday);
.
Я просто удивлен, как IllegalArgumentException автоматически обрабатывается внутри условия if.