我正在使用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()方法。哪个应该更好:
第一个看起来会更好(在我看来),但它可能不是一个“好”的解决方案,而另一个更清洁,但也有点简单。不同的想法也欢迎。
答案 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方法,创建包装器对我来说似乎是一个明智的选择。