可能重复:
Java isInstance vs instanceOf operator何时使用Class.isInstance()以及何时使用instanceof运算符?
当使用Class.isInstance()
以及何时使用instanceof
操作?
Java为检查分配兼容性提供了两种选择。哪个使用时?
可能重复:
Java isInstance vs instanceOf operator何时使用Class.isInstance()以及何时使用instanceof运算符?
当使用Class.isInstance()
以及何时使用instanceof
操作?
Java为检查分配兼容性提供了两种选择。哪个使用时?
我认为官方documentation给你答案,这一个(尽管是在一个相当非特异性的方式):
这种方法是Java语言的instanceof 运营商的动态等效。
我认为isInstance()
主要用于处理运行时类型反射的代码。特别是,我想说,它可以处理你可能事先不知道你想要预先核对会员类别(很少有这些情况)的类别。
例如,你可以用它来写检查,看看如果两个任意类型的对象赋值兼容,像一个方法:
public boolean areObjectsAssignable(Object left, Object right) {
return left.getClass().isInstance(right);
}
一般情况下,我会说,使用instanceof
应当你知道你想要预先检查的课程种类时,首选。在那些非常罕见的情况下,请使用isInstance()
。
“isInstance”方法的另一个典型用例是在处理泛型时。在很多情况下,您有'Class
对于instanceof
您需要在编译时了解确切的类。
if (foo instanceof ThisClassIKnowRightNow)
...
对于isInstance
这个类是在运行时决定的。 (晚结合)例如
if (someObject.getClass().isInstance(foo))
...
+1:至此。对于Java 8流,'.filter(ThisClassIKnowRightNow.class :: isInstance)'比'.filter(o - > o instanceof ThisClassIKnowRightNow)'稍微简洁一些。 – antak 2016-11-29 05:11:45
如果您打算将问题作为副本来结束,请至少引用以前的问题。 – user949300 2012-01-01 18:22:24