我需要檢查:Java - 如何檢查類是否繼承某些類或接口?
public static boolean check(Class<?> c, Class<?> d)
{
if (/* c inherits from d */)
return true;
else
return false;
}
我怎麼能這樣做?
這是可能的沒有c.newInstance()
?
標題在第一時間是錯誤的。現在它是正確的。
我需要檢查:Java - 如何檢查類是否繼承某些類或接口?
public static boolean check(Class<?> c, Class<?> d)
{
if (/* c inherits from d */)
return true;
else
return false;
}
我怎麼能這樣做?
這是可能的沒有c.newInstance()
?
使用isAssignableFrom
if(d.isAssignableFrom(c)){
// then d is a superclass of c
// in other words, c inherits d
}
判定此Class對象 表示的類或接口或者是相同,或是一個超類或超接口中, 類或接口由下式表示指定的Class參數。如果是這樣,它將返回true;否則返回false。如果此Class對象 表示基本類型,則此方法返回true,如果指定的 Class參數恰好是此Class對象;否則返回 false。
有一個叫Class#isInterface()方法Class
if (c.isInterface())
return true;
downvoter關心評論?? – PermGenError 2013-04-25 08:56:50
我沒有downvote,但我第一次想到,當我看到這個答案是它如何檢查繼承或特定接口的實現。也許這個問題在你身上發生了變化,但是如果你重讀了這個問題,OP就會發現一個類是否擴展了另一個類或者實現了一個特定的接口。注意'c繼承d'評論? – 2013-04-25 08:58:53
@KevinBowersox最初的題目是不同的。 :) – PermGenError 2013-04-25 09:00:35
有你陪
c.isInterface()???
從文檔
確定試圖指定的Class對象represe nts一個接口類型。
嘗試了這一點
if(c.isAssignableFrom(d)){
return true;
} else {
return false;
}
右提示,但c和d必須交換'd.isAssignableFrom(c)'。 – Bitterblue 2013-04-26 09:04:48
寫回歸c.isAssignableFrom(d)會更有意義嗎?或者你是Verbose先生 – Snickers3192 2015-02-27 07:39:23
if (c.isInterface()) return true;
isInterface
public boolean isInterface()
判定指定Class對象表示一個接口類型。 返回: 如果此對象表示接口,則爲true;否則爲假。 sAssignableFrom
public boolean isAssignableFrom(Class<?> cls)
判定此Class對象所表示的類或接口或者是相同,或是一個超類或超接口中,通過指定的Class參數所表示的類或接口。如果是的話,它返回true;否則返回false。 如果此Class對象表示基本類型,則此方法返回true,如果指定的Class參數恰好是此Class對象;否則返回false。
具體而言,此方法測試指定Class參數表示的類型是否可以通過標識轉換或通過擴展參考轉換轉換爲此Class對象表示的類型。 有關詳細信息,請參見Java語言規範第5.1.1和5.1.4節。
參數: CLS - Class對象進行檢查 返回: 指示是否型CLS的對象可以被分配給 這個類的對象布爾值拋出: NullPointerException - 如果指定的Class參數爲空。 從: JDK1.1
爲什麼選擇down-vote?我是第一個提到'isInterface' – Apurv 2013-04-25 09:05:16