有沒有簡單的方法來驗證對象是否屬於給定的類?例如,我可以做檢查對象是否屬於Java中的類
if(a.getClass() = (new MyClass()).getClass())
{
//do something
}
但是這需要每次都實例化一個新的對象,只有放棄它。有沒有更好的方法來檢查「a」是否屬於「MyClass」類?
有沒有簡單的方法來驗證對象是否屬於給定的類?例如,我可以做檢查對象是否屬於Java中的類
if(a.getClass() = (new MyClass()).getClass())
{
//do something
}
但是這需要每次都實例化一個新的對象,只有放棄它。有沒有更好的方法來檢查「a」是否屬於「MyClass」類?
的instanceof
關鍵字,如由其他的答案中描述,通常是你想要的東西。 請記住instanceof
也會爲true
返回超類。
如果您想查看某個對象是否是某個類的直接實例,則可以比較該類。您可以通過getClass()
獲取實例的類對象。您可以通過ClassName.class
靜態訪問特定的課程。
因此,例如:
if (a.getClass() == X.class) {
// do something
}
在上面的例子中,如果是a
的X
一個實例,但如果是a
的X
一個子類的實例的條件爲真。
在比較:
if (a instanceof X) {
// do something
}
在instanceof
例如,如果a
是X
的實例,或者如果a
是亞類的X
實例的條件爲真。
大多數情況下,instanceof
是正確的。
嘗試運營商instanceof
。
使用instanceof
操作:
if(a instanceof MyClass)
{
//do something
}
我同意使用instanceof
已經提到過。
的使用instanceof
的另一個好處是,與null
參考instanceof
使用時將返回false
,而a.getClass()
將拋出一個NullPointerException
。
通常的方法是:
if (a instanceof A)
然而,有這樣的情況,當你不能做到這一點,如在一般的參數時A
。
由於Java的類型擦除,下面將無法編譯:
<A> boolean someMethod(Object a) {
if (a instanceof A)
...
}
及以下將無法正常工作(並會產生unchecked cast
警告):
<A> void someMethod(Object a) {
try {
A casted = (A)a;
} catch (ClassCastException e) {
...
}
}
你可以用」因爲在運行時,A
本質上是Object
。
這種情況下的解決方案是使用Class
,而不是通用的說法:
void someMethod(Object a, Class<A> aClass) {
if (aClass.isInstance(a)) {
A casted = aClass.cast(a);
...
}
}
然後,您可以調用該方法爲:
someMethod(myInstance, MyClass.class);
someMethod(myInstance, OtherClass.class);
或更好,但使用IsAssignableFrom(類) – Chii 2010-11-28 06:05:40