【问题标题】:instance method equals()实例方法 equals()
【发布时间】:2011-09-01 12:44:02
【问题描述】:

我需要创建一个名为 EOHoverFrog 的 HoverFrog 子类。 EOHoverFrog 实例与 HoverFrog 实例的不同之处在于,如果两个 EOHoverFrog 实例的位置和高度相同,则无论它们的颜色如何,它们都被视为相等。

为此,我需要为 EOHoverFrog 编写一个实例方法 equals(),它覆盖从 Object 继承的 equals() 方法。该方法应该接受任何类的参数。如果参数的类与接收者的类不同,该方法应该简单地返回 false,否则它应该测试接收者和参数的相等性。

public boolean equals(Object obj)
{
   Frog.getClass().getHeight();
   HeightOfFrog height = (HeightOfFrog) obj;
   return (this.getPosition() == frog.getPosition());
  }

请你告诉我我是否正确?

【问题讨论】:

  • 考虑到这段代码甚至无法编译,我会选择......不。

标签: java methods equals


【解决方案1】:
public boolean equals(Object obj) {
    // my first (incorrect) attempt, read Carlos Heuberger's comment below
    // if (!(obj instanceof EOHoverFrog))
    //    return false;
    if (obj == null)
        return false;
    if (getClass() != obj.getClass())
        return false;
    // now we know obj is EOHoverFrog and non-null
    // here check the equality for the position and height and return
    // false if you have any differences, otherwise return true
}

【讨论】:

  • 注意:instanceof 不会检查 obj 的类是否是 EHoverFrog!对于 EHoverFrog 的任何子类,它也会返回 true,但问题要求“参数的类与接收者的类不同”
【解决方案2】:

这似乎不正确。

public boolean equals(Object obj)
{
   Frog.getClass().getHeight(); // you arent assigning this to anything, and class probably
                                // doesn't have a getHeightMethod()

   HeightOfFrog height = (HeightOfFrog) obj; // obj should be an EOHoverFrog; you should
                                             // return false above this if obj is null or the 
                                             // wrong class

   return (this.getPosition() == frog.getPosition()); // what is frog?  It is not defined
                                                      // in your example

   // you are not comparing heights anywhere.
}

实现equals方法的一个好方法是:

1) 确保传入的另一个对象 obj 在您的情况下不为空并且正确的类(或多个类)。在您的情况下,EOHoverFrogHoverFrog 实例可以相等吗?

2) 进行比较,例如

// 假设高度和位置都在基类上

var isHeightEqual = this.getHeight() == ((HoverFrog)obj).getHeight();
var isPositionEqual = this.getPosition() == ((HoverFrog)obj).getPosition(); 

3) 现在你可以检查相等性了

return isHeightEqual && isPositionEqual;

【讨论】:

    【解决方案3】:

    首先,阅读this 以了解每个equals() 方法的行为方式。

    其次,如果你重写了equals()方法,那么最好在方法前添加@Override注解。

    要通过例子来学习,可以学习很多equals()实现here

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-08-22
      • 2012-10-01
      • 1970-01-01
      • 2018-09-30
      • 2023-03-25
      • 1970-01-01
      • 2023-03-08
      相关资源
      最近更新 更多