以我的理解,下面的 equal 和 hashcode 实现是安全的,因为派生类中的正确方法将调用(而不是父类),即使我通过父指针调用它也是如此。如果父级被视为抽象类(在 JPA 中使用 - hiberante 基类)。请根据以下示例确认此假设。
@Entity
@Inheritance
class A {
String type;
}
@Entity
class B extends A {
String uniqueName;
.......
@Override
public boolean equals(Object obj) {
..
}
@Override
public int hashCode() {
}
}
@Entity
class C extends A {
String uniqueName;
.......
@Override
public boolean equals(Object obj) {
..
}
@Override
public int hashCode() {
}
}
class D {
A a;
String name;
}
既然A可以接受B和C的实例,那么在为D写equal/hash方法的时候,上面的实现是不是可以的(只在B&C中,不在A中)。不会有直接实例化 A(new A)的情况。
谢谢。
最佳答案
您是在问是否可以在直接父类(super class)没有实现的派生类中编写 hashcode 和 equals 方法?
如果说类A永远不会直接实例化,为什么不声明A抽象,那就没有问题。
关于java - 继承类中的相等和哈希码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3356098/