У меня в классе куча полей и каждый раз писать такого рода проверки кажется мне не правильным, вот:
if (tmpProfileModel != null) {
if (tmpProfileModel.getLastName().equals(profileModel.getLastName()) &&
tmpProfileModel.getFirstName().equals(profileModel.getFirstName()) &&
tmpProfileModel.getBirthday().equals(profileModel.getBirthday()) &&
tmpProfileModel.getGender().equals(profileModel.getGender()) &&
tmpProfileModel.getFacebook().equals(profileModel.getFacebook()) &&
tmpProfileModel.getInstagram().equals(profileModel.getInstagram()) &&
tmpProfileModel.getEducation().equals(profileModel.getEducation()) &&
tmpProfileModel.getImage().equals(profileModel.getImage())) {
intent.putExtra(ProfileActivity.IS_EDITED_KEY, false);
} else {
intent.putExtra(ProfileActivity.IS_EDITED_KEY, true);
intent.putExtra(ProfileActivity.EDITED_OBJECT_KEY, profileModel);
}
}
Еще дюжина полей, которое урезал.
Теперь мне нужно проверить все эти поля на Null
, будут еще много проверок и уже путаюсь.
Как вы решаете такого рода задачи?
Кроме выноса логики сравнения в отдельный метод (о чем написал @Serodv) можно использовать Objects.equals
, который сравнивает два значения принимая во внимание null
:
boolean isPartiallyEqual(Model other) {
if(other==null) return false;
return Objects.equals(getFirstName(), other.getFirstName()) &&
Objects.equals(getBirthday(), other.getBirthday()) &&
...
}
Для большего упрощения можно подключить Apache Commons Lang и использовать EqualsBuilder
.
С помощью этого класса можно проверить все поля с помощью рефлексии:
return EqualsBuilder.reflectionEquals(this, other);
либо построить свой объект сравнения с заданным списком полей:
if(other==null) return false;
return new EqualsBuilder()
.append(getFirstName(), other.getFirstName())
.append(getBirthday(), other.getBirthday())
...
.isEquals();
Реализуйте в своём классе методы, обеспечивающие проверки
class SomeClass {
...
boolean someEquals(SomeClass someObj) {
return getFirstName().equals(someObj.getFirstName()) &&
getBirthday().equals(someObj.getBirthday()) &&
getGender().equals(someObj.getGender()) &&
.....;
}
}
ну и проверка
if (tmpProfileModel.someEquals(profileModel))
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Добрый день помогите разобраться с кодомХочу получить данные с сервера в формате JSON
Подскажите как можно задать область определения типа generic'a при создании объекта?То есть в угловых скобках я могу вписать на пример только...
После сканирования получаю соединение с найденным приборомВсе стандартно: читаются сервисы и характеристики, посылается ответ и прибор...
Для загрузки страницы c Selenium используется вот такой код: