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

Jyo*_*rup 42 java

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

何时使用Class.isInstance()以及何时使用instanceof操作员?

Java提供了两个用于检查赋值兼容性的选项.哪个用的?

use*_*300 71

因为instanceof你需要在编译时知道确切的类.

if (foo instanceof ThisClassIKnowRightNow)
   ...
Run Code Online (Sandbox Code Playgroud)

因为isInstance课程是在运行时决定的.(后期绑定)例如

if (someObject.getClass().isInstance(foo))
   ...
Run Code Online (Sandbox Code Playgroud)

  • +1:到了这一点.对于Java 8流,`.filter(ThisClassIKnowRightNow.class :: isInstance)`比`.filter(o - > o instanceof ThisClassIKnowRightNow)`更简洁. (14认同)

aro*_*oth 52

我认为官方文档为您提供了这个答案(尽管是以一种非常特殊的方式):

此方法是Java语言instanceof运算符的动态等效项.

我认为这isInstance()主要是为了在运行时处理类型反射的代码中使用.特别是,我会说它存在处理你可能事先不知道要提前检查成员资格的类的类型的情况(尽管这些情况可能很少见).

例如,您可以使用它来编写一个方法来检查两个任意类型的对象是否与赋值兼容,如:

public boolean areObjectsAssignable(Object left, Object right) {
    return left.getClass().isInstance(right);
} 
Run Code Online (Sandbox Code Playgroud)

一般来说,我会说,instanceof只要你知道要提前检查的课程类型,就应该首选使用.在那些非常罕见的情况下,请不要使用isInstance().

  • `isInstance`方法的另一个典型用例是处理泛型时.在很多情况下你有`Class <T>`对象,检查一个对象是否属于那个类的唯一方法是`isInstance`方法 (7认同)