当前位置: 首页 > 知识库问答 >
问题:

Java isInterface()对于接口不返回true

暴招
2023-03-14

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

同样,基于以下参考文献,

http://tutorials.jenkov.com/java-reflection/classes.html#modifiers http://docs.oracle.com/javase/7/docs/api/java/lang/reflect/Modifier.html#isInterface(内景)

修改值链接

我尝试了以下代码:

int modifierValue = MyInterfaceName.class.getModifiers();
System.out.println(modifierValue)

boolean interfaceFound = Modifier.isInterface(modifierValue);
System.out.println(interfaceFound)

interfaceFind仅返回false。此外,修改值返回17,它不适合我提供的ModifierValueLink中的任何位置。

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

请帮忙。谢谢

共有2个答案

林华皓
2023-03-14

最终得到:)

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);
    }
}

感谢所有回答:)的人,以及lol的downvoter(s)。

松和璧
2023-03-14

我的新答案是在这个链接上。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));

    }
}

这是真的。corect的用法应该是在链接处。

 类似资料:
  • 我写了自己的类加载器,它与类一起工作,实现了接口插件。但是我不能将类转换为插件。怎么了? 错误:(18,47)java:不兼容的类型:java。lang.类无法转换为插件 我补充说,这是我的SimpleClassLoader类的主要部分,它扩展了ClassLoader。

  • 我想在Android应用程序发送包含 /api/Profile/Favorite的超文本传输协议请求时返回存根响应?value={"ID": 11821} 所以这是我的测试(使用WireMock框架) 但是当我开始测试方法测试发送请求浓缩咖啡时,我得到了正式服的生产响应。 这里请求来自Android设备: 这里回应: 正如你所看到的,我没有得到存根响应:{This_is_mock_response

  • 我有几个具体的使用以下类型的接口 具体的课程如下 现在我怎么能写工厂类,它重新运行一个通用接口,比如IActive。 谢谢

  • 问题内容: 当我尝试编译时,它给了我错误 我应该如何解决这个问题? 问题答案: 该错误是由于以下事实导致的:调用将是不明确的- 应该调用两种方法中的哪一种?从JLS§8.4.2开始: 在类中声明两个具有重写等效签名的方法是编译时错误。 方法的返回类型不是其签名的一部分,因此根据上述说明,您将收到错误。 假设您不能简单地重命名冲突的方法,在这种情况下就不能使用继承,并且需要使用诸如compositi

  • 问题内容: 当用Java编程时,我几乎总是出于习惯,编写如下代码: 大多数时候甚至都没有考虑它。现在,问题是:我应该 始终 将接口指定为返回类型吗?还是建议使用接口的实际实现,如果是,在什么情况下使用? 显然,使用该接口有很多优点(这就是为什么它存在的原因)。在大多数情况下,库函数使用哪种具体实现并不重要。但也许在某些情况下确实很重要。例如,如果我知道我将主要随机访问列表中的数据,那将是一个坏习惯

  • 我已经创建了一个需要重用的对象池。每次试图返回对象时,我都会得到一个错误:“返回的对象当前不属于此池” 我得到这个错误: