如何确定对象的类?IF类B和阶级C扩展类A我有一个类型的对象B或C,如何确定它的哪种类型是实例?
3 回答
慕田峪4524236
TA贡献1875条经验 获得超5个赞
Class.isAssignableFrom()
ClassCastException
).
可能的方式概述
obj
C
:
// Method #1 if (obj instanceof C) ; // Method #2 if (C.class.isInstance(obj)) ; // Method #3 if (C.class.isAssignableFrom(obj.getClass())) ; // Method #4 try { C c = (C) obj; // No exception: obj is of type C or IT MIGHT BE NULL! } catch (ClassCastException e) { } // Method #5 try { C c = C.class.cast(obj); // No exception: obj is of type C or IT MIGHT BE NULL! } catch (ClassCastException e) { }
差异 null
装卸
null
在前两个方法中,表达式计算为 false
如果 obj
是 null
(null
不是任何事物的实例)。 第三种方法会抛出一个 NullPointerException
很明显。 第四种和第五种相反的接受方法 null
因为 null
可以投到任何类型!
记住: null
不是除了它以外的任何类型的实例。 可以铸造任何类型的。
注记
Class.getName()
不应用于执行 “是-例如-”
测试对象是否不是类型 C
但是它的一个子类,它可能有一个完全不同的名称和包(因此类名显然不匹配),但它仍然是类型的。 C
.出于同样的继承原因 Class.isAssignableFrom()
不是 对称:
obj.getClass().isAssignableFrom(C.class)
会回来 false
如果 obj
是 C
.
添加回答
举报
0/150
提交
取消