2012-01-01 250 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

相關問題