如果我有一个A类和一个从A扩展的子类B,并且我从某处获得了B的实例bbb,那么最好检查实例bbb实际上不是A。
我能想到的是以下两点。哪个比两个更好或更好?
1)if(!((bbb instanceof A)&&(bbb b of b)))
2)if(bbb.getClass()。getName()!= A.class.getName()){
由于
答案 0 :(得分:2)
bbb
实际上是A
的一个实例,因为B
扩展了A
,因此您的第一个解决方案无法正常工作。
直接比较课程应该符合您的需求:
if (!A.class.equals(bbb.getClass()))
您也可以有不同的想法:
A bbb = ...;
if (bbb instanceof B) {
// bbb has been instantiated via B or one of B subclasses
} else {
// bbb has been instantiated via A or one of A subclasses except B
}
答案 1 :(得分:0)
让我们为动物改变A,为鸟改变B
我已经有了Bird的一个实例,它不可能是一个“原始的”动物。由于Bird是一种更具体的动物类型,JAVA不会让你直接将“原始”Animal分配给Bird变量。如果你的意思是反过来(你有一个动物而你想知道它是否真的是一只鸟)你可以使用
if ( bbb instanceof Bird) ...
简而言之,如果你的问题是对的,你可以确定你有一只Bird而不需要检查任何东西。