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

时间:2012-05-23 01:19:34

标签: java class interface casting runtime

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

我尝试在我的程序进入main时加载该类。 以下是我在那里的内容:

    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/

1 个答案:

答案 0 :(得分:1)

我不知道extcos,但看起来classes包含加载类的java.lang.Class<?>对象。您应该能够使用

创建这些类的实例
IAlgorithm ia = classes.iterator().next().newInstance();

for no-arg-constructor case;或者如果您需要调用非默认构造函数:

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

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