1

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

当我的程序进入主程序时,我尝试加载类。这是我在那里的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());
        }
    });

如何让实例在 IAlgorithm 的实现中调用我的方法?

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

4

1 回答 1

1

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

其中...分别表示上述第一种和第二种用法中的构造函数参数类型和值。

于 2012-05-23T04:28:17.280 回答