bra*_*ter 1 java hash hashcode guava
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() );
}
}
Run Code Online (Sandbox Code Playgroud)
Google guava hashode():Objects.hashCode适用于成员对象.如何在derived :: hashCode()中指定超类hashCode()?我可以直接在派生类hashCode()函数中使用super.members,但是如果super.hashCode()以任何方式更改,那么这将不会反映在derived:hashCode(...)中.
很抱歉没有回答但是:这可能不是你想要做的.有效的Java长期探索为什么子类化值类型以添加额外的值组件是一个坏主意.在第二版中,它是第8项,"当压倒平等时遵守一般合同".另见第16项"赞成继承继承".
哈希码本身就是一个(自动装箱Integer)对象,因此只需包含super.hashCode()在构成哈希的对象中:
public int hashCode() {
return Objects.hashCode(getOriginCity(), super.hashCode());
}
Run Code Online (Sandbox Code Playgroud)