2012-01-01 142 views

回答

45

我认为官方documentation给你答案,这一个(尽管是在一个相当非特异性的方式):

这种方法是Java语言的instanceof 运营商的动态等效。

我认为isInstance()主要用于处理运行时类型反射的代码。特别是,我想说,它可以处理你可能事先不知道你想要预先核对会员类别(很少有这些情况)的类别。

例如,你可以用它来写检查,看看如果两个任意类型的对象赋值兼容,像一个方法:

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

一般情况下,我会说,使用instanceof应当你知道你想要预先检查的课程种类时,首选。在那些非常罕见的情况下,请使用isInstance()

+6

“isInstance”方法的另一个典型用例是在处理泛型时。在很多情况下,您有'Class '对象,并且检查对象是否属于该类的唯一方法是'isInstance'方法 – Robin 2012-01-01 09:45:12

48

对于instanceof您需要在编译时了解确切的类。

if (foo instanceof ThisClassIKnowRightNow) 
    ... 

对于isInstance这个类是在运行时决定的。 (晚结合)例如

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

+1:至此。对于Java 8流,'.filter(ThisClassIKnowRightNow.class :: isInstance)'比'.filter(o - > o instanceof ThisClassIKnowRightNow)'稍微简洁一些。 – antak 2016-11-29 05:11:45

相关问题