在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。