如何确定对象的类?IF类B和阶级C扩展类A我有一个类型的对象B或C,如何确定它的哪种类型是实例?
3 回答
精慕HU
TA贡献1845条经验 获得超8个赞
Class.isAssignableFrom()ClassCastException).
可能的方式概述
objC:
// 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
提交
取消
