我正在覆盖由字符串标识的 Object 的 equals(Object o) 方法:
class User {
@Override
public boolean equals(Object o) {
return o != null && o.hashCode() == this.hashCode();
}
@Override
public int hashCode() {
return id.hashCode();
}
}
但我还想在方法中返回 true 之前检查是否o
是的子类this
或反之亦然equals()
对于我可以使用的第一种情况,if (o instance of User)
但如何以另一种方式进行检查?
谢谢
编辑:由于我没有正确解释它,我将解释完整的问题:
我有课
public abstract class UniqueIdentifiedObject<E> {
private E id;
protected UniqueIdentifiedObject(E id) {
super();
this.id = id;
}
public E getId() {
return id;
}
@Override
public boolean equals(Object o) {
return o != null && o.hashCode() == this.hashCode();
}
@Override
public int hashCode() {
return id.hashCode();
}
}
并且想法是当它由一个元素唯一标识时用一个对象继承这个类:例如,如果我的应用程序的用户由一个整数标识,我将使用:
class User extends UniqueIdentifiedObject<Integer>
和电影
class Movie extends UniqueIdentifiedObject<Integer>
UniqueIdentifiedObject 实现的问题在于,如果调用equals()
id = 1 的电影和 id = 1 的用户,它将返回 true。
我该如何解决这个问题?