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 和一个 int Y。

现在,为了检查相等而不是缩进,

  1. 首先你应该有 setter 和 getter 来设置和返回私有变量的值,例如

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

改编自Joshua Bloch第 2 版 Effective Java中的示例:

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 回答