我正在尝试编写一些通用代码,以根据字段列表定义类相似性和哈希码。在写我的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这有点脏,但我欢迎对这一点的评论。