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

Ram*_*uri 20 java instanceof

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

// pseudo-code
if(obj instanceof B)
    < is B>
else if(obj instanceof C)
    < is C>
else
    <is D>
Run Code Online (Sandbox Code Playgroud)

这是因为我确信从A派生的类只有B,C和D.
但是,如果我只想检查两个引用是否指向同一种对象呢?
所以类似于:

if(obj1 instanceof obj2)
   <do something>
Run Code Online (Sandbox Code Playgroud)

但当然语法是错误的.如果没有一千个if-else怎么检查呢?

Jac*_*ack 47

你的意思是

obj1.getClass().equals(obj2.getClass())
Run Code Online (Sandbox Code Playgroud)

如果两者都属于同一特定类obj1,obj2则返回true .

但如果你要A与之比较,这将无效B extends A.如果你想要等于返回true,即使一个是另一个的子类型,你将不得不写一个更强大的比较函数.我认为你可以通过循环getSuperClass()来升级层次结构树.

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

  • 必要性不是风格问题. (7认同)

kba*_*kba 6

你可以做到

if (obj1.getClass() == obj2.getClass()) { ... }
Run Code Online (Sandbox Code Playgroud)