如何确定对象的类?

如何确定对象的类?

IF类B和阶级C扩展类A我有一个类型的对象BC,如何确定它的哪种类型是实例?



忽然笑
浏览 487回答 3
3回答

aluckdog

if (obj instanceof C) { //your code }

千巷猫影

使用Object.getClass()..它返回对象的运行时类型。

精慕HU

提出了多个正确的答案,但仍然有更多的方法: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.
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java