![](/img/trans.png)
[英]Is there a better/cleaner way to conditionally create a type than using 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.