尝试使用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());
}
});
如何在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(...);
其中,
...
分别表示上述第一用法和第二用法中的构造函数参数类型和值。