一尘不染

查看两个对象是否具有相同的类型

java

假设我有一个类A,而B,C,D是从A派生的。
如果我想知道所引用的对象的类型是什么,可以声明:

// pseudo-code
if(obj instanceof B)
    < is B>
else if(obj instanceof C)
    < is C>
else
    <is D>

这是因为我确定从A派生的类只有B,C和D。
但是,如果我只想检查两个引用是否指向同一种对象,该怎么办?
所以像这样:

if(obj1 instanceof obj2)
   <do something>

但是当然语法是错误的,如何在没有1000 if-else的情况下进行检查?


阅读 223

收藏
2020-12-03

共1个答案

一尘不染

你的意思是

obj1.getClass().equals(obj2.getClass())

即使obj1obj2属于相同的特定类,也应返回true 。

但是,如果A与进行比较,则此方法将无效B extends A。如果您希望相等返回一个true(即使一个是另一个的子类型),则必须编写更强大的比较函数。我认为您可以通过循环使用getSuperClass()以实现层次结构树。

我认为A.getClass().isAssignableFrom(B.getClass()),假设这样做,也可以做一个简单的解决方案B extends A

2020-12-03