Невозможно сравнить длинные значения, используя нулевой безопасный Objects.equals в Java - PullRequest
0 голосов
/ 08 ноября 2018

Я пишу свинг-приложение для управления настройками Gmail для пользователей в моем домене Gsuite, но мой метод проверки изменений не работает должным образом с длинными значениями. Он принимает аргумент с новыми настройками (в данном случае настройки отпуска) и сравнивает его с ранее найденными настройками.

Я извлекаю свои настройки и нажимаю кнопку сохранения, не внося никаких изменений, и мой метод регистрирует изменения. Он видит изменение атрибутов startTime и endTime (оба long) там, где их нет. Я знаю, что это эти атрибуты, потому что, когда я комментирую эти атрибуты, он работает как ожидалось.

private void updateVacation(VacationSettings settings) {
        boolean isModified = false;

        if(!vacationSettings.isEmpty()) {
            if(!Objects.equals(vacationSettings.getEnableAutoReply(), settings.getEnableAutoReply()) ||
                    !Objects.equals(vacationSettings.getStartTime(), settings.getStartTime()) ||
                    !Objects.equals(vacationSettings.getEndTime(), settings.getEndTime()) ||
                    !Objects.equals(vacationSettings.getResponseSubject(), settings.getResponseSubject()) ||
                    !Objects.equals(vacationSettings.getResponseBodyPlainText(), settings.getResponseBodyPlainText()) ||
                    !Objects.equals(vacationSettings.getRestrictToContacts(), settings.getRestrictToContacts()) ||
                    !Objects.equals(vacationSettings.getRestrictToDomain(), settings.getRestrictToDomain())) {
                isModified = true;
            }
        }

        if(isModified) {
            // TODO:Update vacation settings
            Logger.getLogger(MainFrame.class.getName()).log(Level.INFO, settings.toString());
        }
    }
...