Java isInterface()对接口不返回true



在Java中,我定义了一个接口MyInterfaceName [MyInterfaceName.class]。这个.class文件可以在一个jarFile中找到。使用Java反射,我试图在这个特定的类中使用方法class.isInterface(),但它返回false。

同样,根据以下引用,

http://tutorials.jenkov.com/java-reflection/classes.html修饰符http://docs.oracle.com/javase/7/docs/api/java/lang/reflect/Modifier.html isInterface (int)

ModifierValueLink

我尝试了以下代码:

int modifierValue = MyInterfaceName.class.getModifiers();
System.out.println(modifierValue)
boolean interfaceFound = Modifier.isInterface(modifierValue);
System.out.println(interfaceFound)

这个interfaceFound只返回false。此外,modifierValue返回17,它不适合我提供的ModifierValueLink中的任何地方。

但是MyInterfaceName是一个根据java标准定义的接口。我不明白为什么它不工作。

请帮忙。谢谢。

我的新答案在这个链接上。http://java2s.com/Tutorials/Java/java.lang.reflect/Modifier/Java_Modifier_isInterface_int_mod_.htm

我已经在链接中实现了给定的示例;

public interface MyInterfaceName {
    public int a = 0;
    public int b = 0;
}
import java.lang.reflect.Modifier;

public class Main {
    public static void main(String[] args) {
        Class<?> cls = MyInterfaceName.class;
        int modifier = cls.getModifiers();
        System.out.println(Modifier.isInterface(modifier));
    }
}

给出true。正确的用法如下:

终于明白了:)

url = // Your jar file path
JarFile jarFile = new JarFile(url);
Enumeration e = jarFile.entries();
URLClassLoader urlClassLoader;
URL[] urls = { 
    new URL("jar:file:" + url +"!/") 
};
urlClassLoader = URLClassLoader.newInstance(urls);
while (e.hasMoreElements()) {
    JarEntry je = (JarEntry) e.nextElement();
    if(je.isDirectory() || !je.getName().endsWith(".class")){
       continue;
    }   
    String className = je.getName().substring(0,je.getName().length()-6);       
    className = className.replace('/', '.');            
    Class myClass = urlClassLoader.loadClass(className);
    if(myClass.isInterface()){
        System.out.println("Interface found - Name: "+ myClass);
    }
}

感谢所有回复的人:),并为不支持的人(s) lol。

相关内容

  • 没有找到相关文章

最新更新