簡體   English   中英

除了instanceof運算符之外還有什么辦法可以在java中進行對象類型比較嗎?

[英]Is there any way other than instanceof operator for object type comparison in java?

我記得在一些Java書中讀到除了'instanceof'之外的任何運算符,用於比較兩個對象之間的類型層次結構。

instanceof是最常用和最常見的。 我無法清楚地記得是否確實存在另一種做法。

您也可以使用Class.isInstance進行反射。

Class<?> stringClass = Class.forName("java.lang.String");
assert stringClass.isInstance("Some string");

顯然,如果在編譯時知道類的類型,那么instanceof仍然是最好的選擇。

就在這里。 不是運算符而是Class類的方法。

這是: isIntance(對象o)

從文檔引用:

...此方法是Java語言instanceof運算符的動態等價物

public class Some {
    public static void main( String [] args ) {
        if ( Some.class.isInstance( new SubClass() ) ) {
            System.out.println( "ieap" );
        } else { 
            System.out.println( "noup" );
        }
    }
}
class SubClass extends Some{}

instanceof操作是最好的選擇,原因有兩個:1)它處理子類型,所以如果你有一個子類/子類型的實例,你仍然會得到真實。 2)它處理null,因此null instanceof Class將返回false

如果你拿一個對象的類然后與另一個類進行比較,那么你冒着冒一個空對象的類的風險,你不能直接得到子類型。

如果使用表示類的對象,則可以使用反射操作,因為instanceof將引用它們自己的類Class,而不是它們所代表的類。

if ( someClass.isAssignableFrom( obj.getClass() ) )

相當於

if ( obj instanceof Foo )

使用instanceof如果反對是在編譯時已知的檢查得到的類別,使用isAssignableFrom如果在運行時才知道。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM