【发布时间】:2012-04-10 18:17:30
【问题描述】:
我使用的是 hibernate 和 id... 用于持久性(这就是为什么它在比较中被省略的原因)。 (另外,使用 google guava helper equals)
HolidayPackageVariant:
public abstract class HolidayPackageVariant {
private Integer idHolidayPackageVariant;
private HolidayPackage holidayPackage;
private String typeHolidayPackage;
@Override
public boolean equals(Object obj) {
if (obj == this)
return true;
if(obj == null)
return false;
if (getClass().equals(obj.getClass())) {
final HolidayPackageVariant otherPackageVariant = (HolidayPackageVariant) obj;
return Objects.equal(getTypeHolidayPackage(),otherPackageVariant.getTypeHolidayPackage())
&& Objects.equal(getHolidayPackage(),
otherPackageVariant.getHolidayPackage());
}
return false;
}
@Override
public int hashCode() {
return Objects.hashCode(getTypeHolidayPackage(), getHolidayPackage());
}
FlightHolidayPackageVariant:
public final class FlightHolidayPackageVariant extends HolidayPackageVariant{
private Destination originCity;
public boolean equals(Object obj) {
// ..
我应该完全覆盖 equals() 还是应该以某种方式调用 super.equals(...) ?
【问题讨论】:
-
getClass().equals(obj.getClass()) -> NPE 如果 obj 为空。
-
@aviad 更新了 null 检查的答案。
-
我想知道为什么不使用 Apache Commons Lang 库中的帮助类 EqualsBuilder 和 HashCodeBuilder?
-
刚刚发现这个问题可以很好地比较 Guava 和 Apache Commons:stackoverflow.com/questions/4542550/…