我应该如何覆盖API类的equals方法?

时间:2013-01-09 09:47:46

标签: java override wrapper

我正在使用libGDX API的Vector2类,如果我想检查两个向量的相等性,我必须执行以下操作:

Vector2 vectA = new Vector2(0, 1);
Vector2 vectB = new Vector2(1, 1);

if (vectA.x == vectB.x && vectA.y == vectB.y) {
   return true;
}

这非常不舒服,我正在考虑为这种情况创建一个equals()方法。哪个应该更好:

  1. 使用equals(Vector2)方法为Vector2类创建包装器
  2. 使用equals(Vector2,Vector2)方法创建EqualUtil类
  3. 第一个看起来会更好(在我看来),但它可能不是一个“好”的解决方案,而另一个更清洁,但也有点简单。不同的想法也欢迎。

4 个答案:

答案 0 :(得分:2)

是的,你应该。

在我看来,最好创建一个包装器(你还应该覆盖hashCode()以匹配新的行为。)

不仅这样做会导致更易读的代码,它还允许您使用诸如HashSet之类的集合或依赖于equals()行为的其他方法。

逻辑上也有道理,因为您正在尝试创建一个方法来提供特定对象的数据 - 有什么更好的方式来显示它然后将其作为实例方法

答案 1 :(得分:1)

我会继续使用,覆盖equals()类中的hashCode()Vector2方法。

来自Joshua Bloch 项目-9

  

覆盖equals

时始终覆盖hashCode

编辑:

向下滚动到第45页 Page 45: Item-9

答案 2 :(得分:1)

public interface CheckObject(){



  public abstract boolean and(CheckObject checkobject);
}



public abstract class AbstractObject()
    implements CheckObject
{

    public AbstractObject()
    {
    }

public abstract boolean and(CheckObject checkobject);
 protected void beforeObjectChecked(Object obj)
        throws IllegalArgumentException
    {
    }


public class EqualUtil extends AbstractObject {

private int point1;
private int point2;
}
protected EqualUtil(int point1,int point2){

this.point1=point1;
this.point1=point2;
}
public  boolean and(CheckObject checkobject){
    beforeObjectChecked(checkobject);
    return(this.getPoint1()==checkobject.getpoint1() && this.getPoint2()==checkobject.getpoint2()));

}


public int getPoint1() {
    return point1;
}

public void setPoint1(int point1) {
    this.point1 = point1;
}

public int getPoint2() {
    return point2;
}

public void setPoint2(int point2) {
    this.point2 = point2;
}

现在您可以在Main Class中使用它

答案 3 :(得分:0)

当原始设计师由于某种原因不包含它时,Wrapper是一种很好的,可理解的添加新行为的方法。鉴于原始API类只使用java.lang.object equals方法,创建包装器对我来说似乎是一个明智的选择。