gpt4 book ai didi

java - Java 中知道一个对象是否是其他对象的子类

转载 作者:行者123 更新时间:2023-12-01 18:59:07 24 4
gpt4 key购买 nike

我要重写由字符串标识的对象的 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();
}
}

但在方法 equals() 中返回 true 之前,我还想检查 o 是否是 this 的子类,反之亦然>

对于第一种情况,我可以使用 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 实现的问题在于,如果对 id = 1 的电影和 id=1 的用户调用 equals(),它将返回 true。

我该如何解决这个问题?

最佳答案

this.getClass().isAssignableFrom(o.getClass());

Class.isAssignableFrom

来自 javadoc:

Determines if the class or interface represented by this Class object is either the same as, or is a superclass or superinterface of, the class or interface represented by the specified Class parameter. It returns true if so; otherwise it returns false. If this Class object represents a primitive type, this method returns true if the specified Class parameter is exactly this Class object; otherwise it returns false.

因此,上面检查 this 返回的类是否是 o 返回的类的父类(super class)。

关于java - Java 中知道一个对象是否是其他对象的子类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12912698/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com