可能重複:
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