public abstract class HolidayPackageVariant {
private HolidayPackage holidayPackage;
private String typeHolidayPackage;
@Override
public int hashCode() {
return Objects.hashCode(getTypeHolidayPackage(), getHolidayPackage());
}
}
public final class FlightHolidayPackageVariant extends HolidayPackageVariant{
private Destination originCity;
@Override
public int hashCode() {
// need to add super.hashCode() here somehow ?
return Objects.hashCode(getOriginCity() );
}
}Google guava hashode():Objects.hashCode在成员对象上工作。如何在derived::hashCode()中指定超类hashCode()?我可以在派生类hashCode()函数中直接使用super.members,但如果super.hashCode()以任何方式更改,都不会反映在派生的:hashCode(...)中。
发布于 2012-03-27 22:38:17
很抱歉没有回答,但是:这可能不是您真正想要做的事情。Effective很长一段时间都在探索,为什么将一个值类型子类化来添加一个附加值组件不是一个好主意。在第二版中,它是第8项,“当凌驾于平等时,遵守总合同。”另请参阅第16项,“优先于组合而不是继承”。
发布于 2012-03-27 20:09:07
散列码本身就是一个(自动装箱的Integer)对象,所以只需在组成散列的对象中包含super.hashCode()即可:
public int hashCode() {
return Objects.hashCode(getOriginCity(), super.hashCode());
}发布于 2013-07-06 19:53:47
您的类只有一个新数据成员,因此不需要使用Objects.hashCode(Object...)。试着这样做:
public int hashCode() {
Destination oc = getOriginCity();
return 31 * super.hashCode() + (null == oc ? 0 : oc.hashCode());
}如果在子类中有许多新的数据成员,下面这样的代码也可以:
public int hashCode() {
return 31 * super.hashCode() + Objects.hashCode(getOriginCity(), getOtherData(), getMoreData());
}https://stackoverflow.com/questions/9889215
复制相似问题