首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用google guava hashCode()调用super.hashcode

如何使用google guava hashCode()调用super.hashcode
EN

Stack Overflow用户
提问于 2012-03-27 20:05:51
回答 3查看 1.7K关注 0票数 1
代码语言:javascript
复制
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(...)中。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-03-27 22:38:17

很抱歉没有回答,但是:这可能不是您真正想要做的事情。Effective很长一段时间都在探索,为什么将一个值类型子类化来添加一个附加值组件不是一个好主意。在第二版中,它是第8项,“当凌驾于平等时,遵守总合同。”另请参阅第16项,“优先于组合而不是继承”。

票数 8
EN

Stack Overflow用户

发布于 2012-03-27 20:09:07

散列码本身就是一个(自动装箱的Integer)对象,所以只需在组成散列的对象中包含super.hashCode()即可:

代码语言:javascript
复制
public int hashCode() {
    return Objects.hashCode(getOriginCity(), super.hashCode());
}
票数 5
EN

Stack Overflow用户

发布于 2013-07-06 19:53:47

您的类只有一个新数据成员,因此不需要使用Objects.hashCode(Object...)。试着这样做:

代码语言:javascript
复制
public int hashCode() {
    Destination oc = getOriginCity();
    return 31 * super.hashCode() + (null == oc ? 0 : oc.hashCode());
}

如果在子类中有许多新的数据成员,下面这样的代码也可以:

代码语言:javascript
复制
public int hashCode() {
    return 31 * super.hashCode() + Objects.hashCode(getOriginCity(), getOtherData(), getMoreData());
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9889215

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档