2014-04-15 148 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 
} 
相关问题