Java 如何重写API类的equals方法?
我正在使用libgdxapi的Vector2类,如果我想检查两个向量的相等性,我必须执行以下操作: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
Vector2 vectA = new Vector2(0, 1);
Vector2 vectB = new Vector2(1, 1);
if (vectA.x == vectB.x && vectA.y == vectB.y) {
return true;
}
这很不舒服,我正在考虑为这个场景创建一个equals()方法。以下哪一项应该做得更好:
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;
}