何时使用Class.isInstance()
以及何时使用instanceof
运营商?
Java提供了两个用于检查分配兼容性的选项。哪个可以使用?
答案 0 :(得分:66)
对于instanceof
,您需要在编译时知道确切的类。
if (foo instanceof ThisClassIKnowRightNow)
...
对于isInstance
,课程在运行时决定。 (后期绑定)例如
if (someObject.getClass().isInstance(foo))
...
答案 1 :(得分:51)
我认为官方documentation会给你这个答案(尽管是以一种非常特殊的方式):
此方法是Java语言instanceof的动态等价物 操作
我认为这意味着isInstance()
主要用于在运行时处理类型反射的代码。特别是,我会说它存在处理你可能事先不知道要提前检查成员资格的类的类型的情况(尽管这些情况可能很少见)。
例如,您可以使用它来编写一个方法来检查两个任意类型的对象是否与赋值兼容,如:
public boolean areObjectsAssignable(Object left, Object right) {
return left.getClass().isInstance(right);
}
一般情况下,我会说,只要您知道要提前检查的课程类型,就应该首选使用instanceof
。在极少数情况下,请不要使用isInstance()
。