Одна вещь - иметь вспомогательный метод в служебном классе:
public static boolean equals(Object o1, Object o2)
{
if (o1 == o2)
{
return true;
}
if (o1 == null || o2 == null)
{
return false;
}
return o1.equals(o2);
}
Тогда вы можете написать:
public boolean equals(Object other)
{
if (other == null || this.getClass() != other.getClass())
{
return false;
}
Foo x = (Foo) other;
return Helper.equals(o1, x.o1) &&
Helper.equals(o2, x.o2) &&
Helper.equals(o3, x.o3) &&
Helper.equals(o4, x.o4);
}
Обратите внимание, что таким образом он также справляется, когда два поля равны нулю, чего нет в коде в вопросе. (Я говорю «справляется» - это дает результат, который более соответствует остальной части Java.)
Вы можете создать аналогичный вспомогательный метод и для hashCode
.
Обратите внимание, что Guava уже поддерживает это в своем классе Objects
(и я уверен, что многие другие вспомогательные библиотеки тоже).