Java 如何在运行时加载接口的实现并调用所述类的方法?
尝试使用extcos在运行时动态链接我的接口实现,以便用户可以创建自己的类,编译它并使用我的程序。不过,我在提取类时遇到了问题。用这样的类工作让我很头疼,但看起来大部分工作都是由extcos完成的 当我的程序进入main时,我尝试正确加载类。 这是我在atm机里的东西: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>&
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所在的文件夹呢?和舱单有关吗?