假设我有一个类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的情况下进行检查?
你的意思是
obj1.getClass().equals(obj2.getClass())
即使obj1和obj2属于相同的特定类,也应返回true 。
obj1
obj2
但是,如果A与进行比较,则此方法将无效B extends A。如果您希望相等返回一个true(即使一个是另一个的子类型),则必须编写更强大的比较函数。我认为您可以通过循环使用getSuperClass()以实现层次结构树。
A
B extends A
getSuperClass()
我认为A.getClass().isAssignableFrom(B.getClass()),假设这样做,也可以做一个简单的解决方案B extends A。
A.getClass().isAssignableFrom(B.getClass())