我有一个程序,其中equals()方法已被覆盖,但hashcode()不是,但根据这两者之间的java契约,哈希码也必须被覆盖。在这种情况下,我只想覆盖hashcode()而不会导致程序流程的任何变化。我没有使用生成的哈希码插入任何hashmap或哈希表。所以告诉我覆盖hashcode()的最佳解决方案。
答案 0 :(得分:0)
@fge指出,最好的解决方案是正确实施hashcode()
,即使您不希望使用它。
但如果您决定忽略此问题而未正确实施hashcode()
,那么我建议您按照以下方式实施:
public int int hashcode() {
// Fail fast!
throw new UnsupportedOperationException("hashcode");
}
如果您(或维护代码的其他人)忘记了,并且将此类的实例放入哈希表中,那么您提出的两个“解决方案”就会出现问题。
这个问题:
public int int hashcode() {
return 0;
}
它会给你带来悲观的表现。
您的其他提案:
public int int hashcode() {
return this.hashcode();
}
要么失败(带有StackOverflowError
异常),要么在使用时进入无限循环。实际行为(至少在理论上)是特定于平台的。