2014-04-15 111 views
2

我正在使用該字符串來獲取一個Class名稱並使用Class.forName()來獲得一個Class。如何檢查Class.forName()是否實現了特定的接口?

現在我想知道這個類是否是另一個類的實例(在這種情況下是java.lang.AutoCloseable)。

我的代碼是

Class c = Class.forName("java.io.FileInputStream"); 
if(c instanceof java.lang.AutoCloseable){ 
    //detected that FileInputStream implements AutoCloseable 
} 

但它似乎並沒有工作。我也嘗試過c.newInstance()和c.getClass()。newInstance(),但都不工作並拋出異常。請幫忙!

+8

儘量考慮看看['類#isInstance'(http://docs.oracle.com/javase/ 7/docs/api/java/lang/Class.html#isInstance(java.lang.Object))還是[Class#isAssignableFrom'](http://docs.oracle.com/javase/7/docs/ API/JAVA/LANG/Class.html#isAssignableFrom(java.lang.Class中))...? – MadProgrammer

+1

正如我們所期望的那樣,'instanceof'的左操作數是一個對象_instance_,而不是'Class '的類或實例。要測試類本身,你應該使用'java.lang.Class'的'isAssignableFrom()'方法 –

回答

0

嘗試這樣的事情

boolean isComparable = Comparable.class.isAssignableFrom(cls)); 
1
Class c = Class.forName("java.io.FileInputStream"); 
if(c instanceof java.lang.AutoCloseable){ 
    //detected that FileInputStream implements AutoCloseable 
} 

TO

Class c = Class.forName("java.io.FileInputStream"); 
if(java.lang.AutoCloseable.class.isAssignableFrom(c)){ 
    //detected that FileInputStream implements AutoCloseable 
} 
相關問題