java - 如何在运行时加载接口(interface)的实现并调用该类的方法?

标签 java class interface casting runtime

尝试使用 extcos 在运行时动态链接我的接口(interface)实现,以便用户可以创建自己的类、编译它并使用我的程序。不过,我在提取类(class)时遇到问题。使用这样的类超出了我的想象,但看起来 extcos 完成了大部分工作。

我尝试在程序进入主程序时加载该类。 这是我在自动柜员机里有的东西:

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

如何在 IAlgorithm 的实现中获取实例来调用我的方法?

http://sourceforge.net/projects/extcos/

最佳答案

我不知道 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(...);

哪里...分别代表上面第一个和第二个用法中的构造函数参数类型和值。

关于java - 如何在运行时加载接口(interface)的实现并调用该类的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10712277/

相关文章:

java - 在 Java 中长期被视为 32 位?

java - 使用 makefile 无法找到或加载主类

javascript - Node.js:在另一个自定义类中引用自定义类

pointers - 如何使用interface{}将整数作为指针传递给函数

java - 如何实现一个消息发送系统?

java - 如何创建用户定义的JLabel、JTextField?

javascript - vaadin 网格的组件渲染器

java - 如何锁定 Java 线程,以便在 Platform.runLater 完成之前锁定其他线程

class - 在 Dart 中,当存储在变量中时如何使用 `class` ?

java - 阴影还是实现?