我正在尝试编写一些通用代码来定义基于字段列表的类相等和哈希码。在编写我的 equals 方法时,我想知道根据 Java 约定,两个不同的对象是否应该相等。让我举几个例子;
class A {
int foo;
}
class B {
int foo;
}
class C extends A {
int bar;
}
class D extends A {
void doStuff() { }
}
...
A a = new A(); a.foo = 1;
B b = new B(); b.foo = 1;
C c = new C(); c.foo = 1; c.bar = 2;
D d = new D(); d.foo = 1;
a.equals(b); //Should return false, obviously
a.equals(c);
c.equals(a); //These two must be the same result, so I'd assume it must be false, since c cant possible equal a
a.equals(d); //Now this one is where I'm stuck.
我认为没有理由在最后一个示例中两者不应该相等,但它们确实有不同的类。任何人都知道什么约定?如果它们相等,equals 方法应该如何处理呢?
编辑:如果有人对此问题背后的代码感兴趣,请参阅:https ://gist.github.com/thomaswp/5816085这有点脏,但我欢迎对要点发表评论。