基于子类的Hashcode?

时间:2014-11-13 17:56:01

标签: java inheritance polymorphism hashcode

可能是一个常见问题,我不确定是否有Java解决方案

假设我们有A类,B类和C类。其中B和C延伸A.

我们有一个

Set<A>

A有一个基于A属性的简单哈希码。我的问题是当我将B和C添加到集合中时,其中B和C可能具有相对于A的相同属性。

显然B有一些属性C没有,C有一些属性B没有。问题是我无法将B和C添加到集合中,因为它们的哈希码(使用A的哈希码函数)将是相同的。由于原因(此处未解释),我不允许从Set A中删除任何内容。

我的问题真的归结为,我们有2个对象A,其中一个确实是B.然而,关于这个集合和它们的哈希码,它们是相同的。反正我是否可以表示这些2即使所有A属性都相同,实际上也不一样?

如果A的哈希码函数可以基于它的底层子类实际上是什么,那将是多么好的。这可能吗?无论如何我的问题?

1 个答案:

答案 0 :(得分:3)

覆盖hashCode并且等于B和C中的方法。

这种方式当散列来比较它们时,它将包括它们的属性以及委托下来比较A中的属性。