有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何反映和加载实现特定接口的所有类

我正在尝试加载&;创建实现特定属性的所有类

java中使用反射的接口

假设我有:

package Test;

interface foo {}
class one implements foo {
}
class two implements foo {
}

如何做到这一点

你能帮忙吗


共 (1) 个答案

  1. # 1 楼答案

    您可以查看一个特定的包和iterate in all classes(我只是复制代码,然后通过链接)。然后,测试它是否使用specific interface

    public static void main(String[] args) throws Exception{
       List<Class> classes = getClasses(ClassWithMain.class.getClassLoader(), "fr/jamailun/test");
       for(Class c : classes){
          for(Class i : c.getInterfaces()) {
             if(i.isAssignableFrom(FooInterface.class)) {
                System.out.println("The class " + c + "implements interface "+FooInterface);
                //your code then
             }
          }
       }
    }
    
    public static List<Class> getClasses(ClassLoader cl, String pack) throws Exception {
       String dottedPackage = pack.replaceAll("[/]", ".");
       List<Class> classes = new ArrayList<>();
       URL uPackage = cl.getResource(pack);
       DataInputStream dis = new DataInputStream((InputStream) uPackage.getContent());
       String line;
       while ((line = dis.readLine()) != null) {
          if(line.endsWith(".class")) {
              classes.add(Class.forName(dottedPackage+"."+line.substring(0,line.lastIndexOf('.'))));
          }
       }
       return classes;
    }
    

    请注意,“ClassWithMain”就是包含这个main方法的类:可以在任何地方,只要更改名称即可