0

使用した方法.equalsを置き換える方法を作成してequalsいます。オブジェクトを受け入れます。そのオブジェクトがクラスを実行するクラスと等しいかどうかを確認したいと思います.equals

私が持っているすべてのプライベートメソッドをそのオブジェクトと比較したいのはわかっています。

オブジェクトからプライベート変数を取得するために別のプライベートクラスを作成せずにこれを行う方法はありますか?アイデンティティではなく平等を比較するためにこれを行うにはどうすればよいですか?私はこれで立ち往生しています。==比較するために使用する必要がありますか?

また、オンラインで見ると、他の人が再帰を使用していることがわかります。これが私がしなければならない方法であるならば、あなたはそれを私に見せて説明することができますか?

だから私が持っている例

public boolean equals(Object o)
{

これは、bobtheBuilder(頭に浮かぶ最初のもの)と呼ぶクラスにあります。オブジェクトoがクラスと等しいかどうかを確認したいと思います。bobTheBuilderには、プライベートオブジェクト配列とプライベートintがあります。このクラスの配列とintがオブジェクトの配列とintと等しいかどうかを確認したいと思います。最初に私はそれがnullに等しいかどうかをチェックする必要があることを知っているので

private _arrayObject[];

private _integerBob;

public boolean equals(Object o)
{
    boolean result = true;

    if (o == null)
        result = false

    bobTheBuilder compared = (bobTheBuilder) o;

    if(compared.getArray != _arrayObject[] || compared.getInt != _integerBob)
        result == false

    return result
}

私は平等が同一性ではなく平等をチェックすることを知っているので、これは間違っていると思います。どうすればいいですか

4

3 に答える 3

1

したがって、クラスZにプライベート配列XとintYがあります。

さて、同一性ではなく同等性をチェックするために、

  1. まず、プライベート変数の値を設定して返すセッターとゲッターが必要です。

public void setArrayX(Object [] arr)、public Object [] getArrayX()

2.これで、eqaulsメソッドは次のようになります。

boolean equals(Object o) {
  if(Arrays.equals(this.getArrayX(),o.getArrayX()) && this.getIntY() == o.getIntY())
   return true;
  return false;
}
于 2012-10-18T22:53:38.780 に答える
1

JoshuaBlochによるEffectiveJava、第2版の例から適応:

public boolean equals(Object o) {
  if (o == this) {
    return true;
  }

  if (!(o instanceof BobTheBuilder)) {
    return false:
  }

  BobTheBuilder bob = (BobTheBuilder) o; //guaranteed to succeed

  return Arrays.equals(bob._arrayObject, _arrayObject)
    && bob._integerBob == _integerBob;
}

hashCode同様にオーバーライドすることを忘れないでください。

本のテキストは、ここequalsにある方法のために設定された契約を参照してObjectいます

于 2012-10-18T23:45:28.857 に答える
0

クラスをチェックする最良の方法は、

someObject.getClass().isInstance(anotherObject)

指図。

これは継承でも機能します。

于 2012-10-18T23:02:33.330 に答える