我应该如何使用google guava hashCode()调用super.hashcode

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(...)中.

Kev*_*ion 8

很抱歉没有回答但是:这可能不是你想要做的.有效的Java长期探索为什么子类化值类型以添加​​额外的值组件是一个坏主意.在第二版中,它是第8项,"当压倒平等时遵守一般合同".另见第16项"赞成继承继承".


Boh*_*ian 5

哈希码本身就是一个(自动装箱Integer)对象,因此只需包含super.hashCode()在构成哈希的对象中:

public int hashCode() {
    return Objects.hashCode(getOriginCity(), super.hashCode());
}
Run Code Online (Sandbox Code Playgroud)

  • hashcode()返回一个`int`,它将被自动装入一个`Integer`. (2认同)