2013-09-04 8 views
5

カスタムクラスがあります。私は数回それらのハッシュコードがそれの異なるインスタンスのために同じであることを発見した。何故ですか?正常?hashCodeは、内部クラスの異なるインスタンスに対して同じにすることができますか?

EDIT:

私が持っている内部クラスがSwingWorkerクラスのサブクラスです。

+5

'SwingWorker'は' hashCode'を実装していないので、 'Object'の実装が呼び出されます。そのjavadocを読んでください。 –

答えて

7

ハッシュコードは、オブジェクトごとに異なる必要はありません。唯一の要件は、等しいオブジェクトに対して同じものでなければならないということです。

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; 
    } 
} 
関連する問題