何时使用Class.isInstance()以及何时使用instanceof运算符?

可能重复:
Java isInstance vs instanceOf运算符

何时使用Class.isInstance()以及何时使用instanceof运算符?

Java为检查赋值兼容性提供了两个选项。 哪个使用时?

我认为官方的文件给你这个答案(虽然以一个非常具体的方式):

这个方法是Java语言instanceof操作符的dynamic等价物。

我认为这意味着isInstance()主要用于在运行时处理typesreflection的代码。 尤其是,我想说的是,如果您事先不知道您想要提前入会的types(很less有这些情况),那么您就可以处理这种情况。

例如,你可以用它来编写一个方法来检查两个任意types的对象是否是赋值兼容的,比如:

 public boolean areObjectsAssignable(Object left, Object right) { return left.getClass().isInstance(right); } 

一般来说,我会说,使用instanceof应该是首选的,只要你知道你想检查的类的types。 在那些非常罕见的情况下,请使用isInstance()

instanceof你需要在编译时知道确切的类。

 if (foo instanceof ThisClassIKnowRightNow) ... 

对于isInstance ,类是在运行时决定的。 (后期绑定)

 if (someObject.getClass().isInstance(foo)) ...