何时使用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)) ...