Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/393.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何重写API类的equals方法?_Java_Overriding_Wrapper - Fatal编程技术网

Java 如何重写API类的equals方法?

Java 如何重写API类的equals方法?,java,overriding,wrapper,Java,Overriding,Wrapper,我正在使用libgdxapi的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()方法。以下哪一项应该做得更好: 使用equals(V

我正在使用libgdxapi的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()方法。以下哪一项应该做得更好:

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

    是的,你应该

    在我看来,最好创建一个包装器(您还应该重写
    hashCode()
    ,以匹配新的行为)

    这样做不仅会产生更可读的代码,还允许您使用集合,例如a或其他依赖于
    equals()
    行为的方法

    这在逻辑上也是有意义的,因为您正试图创建一个提供特定对象数据的方法-有什么更好的方式来显示它,然后将其作为实例方法来执行呢?

    是的,您应该这样做

    在我看来,最好创建一个包装器(您还应该重写
    hashCode()
    ,以匹配新的行为)

    这样做不仅会产生更可读的代码,还允许您使用集合,例如a或其他依赖于
    equals()
    行为的方法


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

    当原始设计人员出于某种原因没有包含它时,包装器是添加新行为的一种很好的、可以理解的方式。考虑到原始API类只使用java.lang.object equals方法,创建一个包装器对我来说似乎是一个明智的选择。

    当原始设计人员出于某种原因没有包括它时,包装器是添加新行为的一种好的、可理解的方法。考虑到原始API类只使用java.lang.object equals方法,创建一个包装器对我来说似乎是一个明智的选择。

    我同意,在
    Vector2
    类中重写
    equals()
    hashCode()
    方法

    来自Joshua Bloch第9项

    重写等于时始终重写哈希代码

    编辑:

    向下滚动至第45页

    我同意,在
    Vector2
    类中重写
    equals()
    hashCode()
    方法

    来自Joshua Bloch第9项

    重写等于时始终重写哈希代码

    编辑:

    向下滚动至第45页

    现在您可以从主类使用它


    现在您可以从主类使用它了,如上所述,您还应该覆盖hashCode。如上所述,您还应该覆盖hashCode。
    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;
    }