Java 检查对象是否与此对象属于同一类?
我有一个用于Java中多种数据对象类型的基类。我想在基类中创建一个Java 检查对象是否与此对象属于同一类?,java,class,instanceof,Java,Class,Instanceof,我有一个用于Java中多种数据对象类型的基类。我想在基类中创建一个equals方法,该方法在继承时直接工作 相等性由两个对象决定 属于基类的子类。这很容易通过使用 if (!(anObject instanceof BaseClass)) return false; ID字段是由基类定义的,所以我们可以在这里测试它 if (this.id != ((BaseClass) anObject).id) return false; 属于同一阶级的。这就是我的问题所在。两个对象可
equals
方法,该方法在继承时直接工作
相等性由两个对象决定
if (!(anObject instanceof BaseClass))
return false;
if (this.id != ((BaseClass) anObject).id)
return false;
而不是instanceof。只有当两个对象属于同一个类时,才会返回true(通过引用检查类对象是否相等是安全的)。然后您可以比较id。您可以使用
Class.isInstance()
方法进行比较。在基类中,执行此操作
public static boolean isAnInstance(Object obj)
{
return BaseClass.class.isInstance(obj);
}
那你可以查一下
if (BaseClass.isAnInstance(object))
{
// Class of object is 'BaseClass' or
// it extends the 'BaseClass'
}
希望这有帮助。了解对象相等性的最佳实践是,如果在集合中维护对象,则重写hashcode()和equals() 您可以参考实施equals时应阅读的问题
要使其简短些:使用
this.getClass()==other.getClass()
而不是的instanceof
,因为否则equals()
关系将不可传递(superInstance.equals(subInstance)
将为true,但subInstance.equals(superInstance)
将为false).如果我正确理解您的问题,您需要一种方法来区分具有相同id的同一类的两个对象。如果是这样,您可以使用toString(),它提供对象的唯一表示形式,除非它们是字符串对象。当然,您不能在基类中重写toString()。
示例:您可以使用此选项,仅适用于您提到的第三种情况
if (this.toString()!= anObject.toString())
return false;
为此,您可以使用
Object.getClass().equals(this.getClass())
(假设您指的是类类型,而不是特定实体中的类属性)。您指的是this.getClass()
?有效的Java非常清楚地表明:试图扩展值对象并维护等于
的契约是非常没有希望的。不,我的问题是关于两个具有相同ID但不同类的对象。这是真的;在我的例子中,基类是抽象的,因此不能有它的实例。所有数据对象都属于子类。
if (this.toString()!= anObject.toString())
return false;