1. ホーム
  2. java

[解決済み] .equals()を生成する際にinstanceofよりもgetClass()を優先する理由はありますか?

2022-04-14 03:29:36

質問

Eclipseを使って .equals().hashCode() というオプションがあり、quot;Use 'instanceof' to compare types"というラベルが付けられています。 デフォルトでは、このオプションはチェックされておらず、このオプションは .getClass() を使用して型を比較します。 を選択すべき理由はありますか? .getClass() よりも instanceof ?

を使用しない場合 instanceof :

if (obj == null)
  return false;
if (getClass() != obj.getClass())
  return false;

使用方法 instanceof :

if (obj == null)
  return false;
if (!(obj instanceof MyClass))
  return false;

通常、私は instanceof を削除してください。 if (obj == null) "をチェックします。(ヌルオブジェクトは常に失敗するので、これは冗長です instanceof .) それが悪いという理由はあるのでしょうか?

どのように解決するのですか?

もし instanceof を作成すると equals 実装 final はメソッドの対称性契約を維持することになります。 x.equals(y) == y.equals(x) . もし final が制限されているように見える場合は、オブジェクトの等価性の概念を慎重に検討し、オーバーライドする実装が Object クラスがあります。