5
カスタムクラスがあります。私は数回それらのハッシュコードがそれの異なるインスタンスのために同じであることを発見した。何故ですか?正常?hashCodeは、内部クラスの異なるインスタンスに対して同じにすることができますか?
EDIT:
私が持っている内部クラスがSwingWorker
クラスのサブクラスです。
カスタムクラスがあります。私は数回それらのハッシュコードがそれの異なるインスタンスのために同じであることを発見した。何故ですか?正常?hashCodeは、内部クラスの異なるインスタンスに対して同じにすることができますか?
EDIT:
私が持っている内部クラスがSwingWorker
クラスのサブクラスです。
ハッシュコードは、オブジェクトごとに異なる必要はありません。唯一の要件は、等しいオブジェクトに対して同じものでなければならないということです。
SwingWorker
内部クラスが同じハッシュコードを生成することが懸念される場合は、内部クラスのhashCode
メソッドをオーバーライドして、必要に応じてハッシュコードを提供することができます。もちろん、両方の方法にマッチングロジックを供給するだけでなくequals
をオーバーライドする必要があります:
final int workerId = 123;
SwingWorker<String,Object> myWorker = new SwingWorker<String,Object> {
@Override
public String doInBackground() {
...
}
@Override
protected void done() {
...
}
@Override
public int hashCode() {
return workerId;
}
@Override
public boolean equals(Object other) {
return other == this;
}
}
'SwingWorker'は' hashCode'を実装していないので、 'Object'の実装が呼び出されます。そのjavadocを読んでください。 –