我正在尝试根据以下要求实现对象相等:
class MyObject {
String x;
String y;
}
1)如果被比较的2个对象上的两个属性都是非空的,那么如果x.equals(x)&& y.equals(y)的
2)如果在被比较的任何对象上至少有一个x为空,那么如果y.equals(y)(假设两个y都是非空的)它们是相等的
3)如果在被比较的任何对象上至少有一个y为空,那么如果x.equals(x)(假设两个x都是非空的)它们是相等的
经过几次尝试后,我开始认为根据这些要求无法实现equals方法的传递关系。欢迎评论! THKS。
答案 0 :(得分:6)
取这些(x,y)对:
根据规则,(1,2)=(1,null)=(1,3),这会让你相信(1,2)=(1,3),这是假的。所以是的,这是不可能的。
编辑:误读规则,现在修复
答案 1 :(得分:1)
从这三个要求来看,你是对的;你没有传递感。
采取以下示例:
x = "hello", y = "mom"
x = "hello", y = null
x = "hello", y = "world"
按照你的说法,第一个和第二个相等,第二个和第三个相等,但第一个和第三个不相等。
您可能想要的是添加以下限制:1)如果一个x为空,另一个必须与它们相等且2)相同的ys。
答案 2 :(得分:0)
我不确定你的意思是“如果至少有一个y为空”,那么你可能需要进一步澄清这一点,但这里有一个基于我如何理解你的规范的解决方案。
public boolean yourEquals(Object x, Object y) {
if(x != null && y != null) return x.equals(x) && y.equals(y);
else if(x == null) return y.equals(y);
else return x.equals(x);
}
如果我制作了有缺陷的假设,请更正我的假设,但是您对问题的描述在某些地方有点难以理解。
编辑:当然,这种关系不是传递性的。如上所述,与您的要求无关,可以传递。但是这个函数会根据你的三个规则返回一个布尔值。