Java 如何在运行时加载接口的实现并调用所述类的方法?

Java 如何在运行时加载接口的实现并调用所述类的方法?,java,class,interface,casting,runtime,Java,Class,Interface,Casting,Runtime,尝试使用extcos在运行时动态链接我的接口实现,以便用户可以创建自己的类,编译它并使用我的程序。不过,我在提取类时遇到了问题。用这样的类工作让我很头疼,但看起来大部分工作都是由extcos完成的 当我的程序进入main时,我尝试正确加载类。 这是我在atm机里的东西: final Set<Class<? extends IAlgorithm>> classes = new HashSet<Class<? extends IAlgorithm>&

尝试使用extcos在运行时动态链接我的接口实现,以便用户可以创建自己的类,编译它并使用我的程序。不过,我在提取类时遇到了问题。用这样的类工作让我很头疼,但看起来大部分工作都是由extcos完成的

当我的程序进入main时,我尝试正确加载类。 这是我在atm机里的东西:

    final Set<Class<? extends IAlgorithm>> classes = new HashSet<Class<? extends IAlgorithm>>();

    ComponentScanner scanner = new ComponentScanner();
    scanner.getClasses(new ComponentQuery() {
        @Override
        protected void query() {
            select().
            from("logic").
            andStore(thoseImplementing(IAlgorithm.class).into(classes)).
            returning(none());
        }
    });

final Set我不知道extcos,但它看起来确实像
classes
包含了加载类的
java.lang.Class
对象。您应该能够使用创建这些类的实例

IAlgorithm ia = classes.iterator().next().newInstance();
对于无参数构造函数的情况;或者,如果需要调用非默认构造函数:

Class<? extends IAlgorithm> cls = classes.iterator().next();
Constructor<? extends IAlgorithm> c = cls.getConstructor(...);
IAlgorithm ia = c.newInstance(...);

Class我不知道extcos,但它看起来确实像
classes
包含了加载类的
java.lang.Class
对象。您应该能够使用创建这些类的实例

IAlgorithm ia = classes.iterator().next().newInstance();
对于无参数构造函数的情况;或者,如果需要调用非默认构造函数:

Class<? extends IAlgorithm> cls = classes.iterator().next();
Constructor<? extends IAlgorithm> c = cls.getConstructor(...);
IAlgorithm ia = c.newInstance(...);

ClassIs如果用户在编译实现后必须重新启动您的程序,这可以接受吗?如果用户在编译实现后必须重新启动您的程序,这可以接受吗?嗯,如果我将程序打包到一个jar中,它会停止查找。。我通过查看包逻辑找到它,我认为它现在只搜索jar的内容。我怎样才能把它指向jar所在的文件夹呢?与清单有关吗?嗯,如果我将程序打包到一个jar中,它会停止查找。。我通过查看包逻辑找到它,我认为它现在只搜索jar的内容。我怎样才能把它指向jar所在的文件夹呢?和舱单有关吗?