对于这个例子:
public class Foo{}
public class Bar extends Foo{}
....
void myMethod(Foo qux){
if (checkInstance(qux,Foo.class)){
....
}
}
Run Code Online (Sandbox Code Playgroud)
如何检查是否qux是Foo的实例(但不是foo的子类的实例)?那是:
instanceof这张支票有什么样的陈述吗?或者我应该使用qux.getClass().equals(Foo.class)
Dun*_*nes 53
如果你必须这样做,唯一的方法就是getClass().equals(Foo.class)你建议的选项.
但是,OO设计的目标是让您以同样的方式对待任何 Foo一个.实例是否是子类在正常程序中应该是无关紧要的.
你应该使用instanceof
if(qux instanceof Foo && !(qux instanceof Bar)) {
...
}
Run Code Online (Sandbox Code Playgroud)
这适用于类和接口,因此在大多数情况下,它应该优先于.class不适用于接口的方法。