Обычно вы проверяете, является ли один нулем, а другой нет в вашем методе equals.Для хэш-кода вы просто должны использовать 0 в качестве нулевого хеш-кода.Пример:
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((addressLine1 == null) ? 0 : addressLine1.hashCode());
result = prime * result + ((state == null) ? 0 : state.hashCode());
result = prime * result + ((country == null) ? 0 : country.hashCode());
return result;
}
Если вы используете IDE, она обычно генерирует их для вас.В eclipse выберите Source, Generate equals и hashcode, и он позволит вам выбрать поля, которые вы хотите включить в методы equals и hashcode.Для метода equals и ваших полей, это то, что создает eclipse:
public boolean equals(Object obj) {
if (this == obj) return true;
if (obj == null) return false;
if (getClass() != obj.getClass()) return false;
YourClass other = (YourClass) obj;
if (addressLine1 == null) {
if (other.addressLine1 != null) return false;
} else if (!addressLine1.equals(other.addressLine1)) return false;
if (country == null) {
if (other.country != null) return false;
} else if (!country.equals(other.country)) return false;
if (state == null) {
if (other.state != null) return false;
} else if (!state.equals(other.state)) return false;
return true;
}
Я бы использовал это в качестве отправной точки и сделал бы любые изменения, которые вы считаете необходимыми оттуда.