小弟我们爱分享-Obey the general contract when overriding equals
2012-01-19
我们爱分享---Obey the general contract when overriding equals这两天热度有点低,也没什么好写的,就随便
我们爱分享---Obey the general contract when overriding equals 这两天热度有点低,也没什么好写的,就随便奉献上Effective Java中的一条规则 Obey the general contract when overriding equals
今天只讲其中的一个原则及其注意事项: symmetric: For any reference values x and y, x.equals(y) must return true if and only if y.equals(x) returns true. 可以称之为对称性或者交换性原则,即x.equals(y)返回true是y.equals(x)的充要条件。
理论大家会讲,但是在override的时候,大家很容易出错。
Java code
public class A { public int x; public boolean equals(Object obj) { if (! (obj instanceof A)) { return false; } A that = (A) obj; return this.x == that.x; }}
public class B extends A { public int y; public boolean equals(Object obj) { if (! (obj instanceof B)) { return false; } B that = (B) obj; return super.equals(obj) && this.y == that.y; }}
此时,无论B中间的equals方法如何调整,都会导致symmetric原则被破坏:
Java code
A a = new A();B b = new B();System.out.println(a.equals(b)); // true,B是A的子类,b当然是instanceof A,而且由于之比较a.x和b.x,所以trueSystem.out.println(b.equals(a)); // false,a不是B的实例
[解决办法] 不错,有深度才好拿出来分享下。 [解决办法] 我是来学习的。 [解决办法] 这两天热度有点低,也没什么好写的,就随便奉献上Effective Java中的一条规则 Obey the general contract when ove [解决办法] 谢谢分享 以后多分享点这样的好东西哦 [解决办法] 顶lz [解决办法]