问题:我有一个外部用户可以实现的抽象类。这些类将在我的应用程序中使用。但是我事先并不知道这些课程。我想在运行时加载它们。
当前设置:当前设置是将类添加到一个jar文件中,并在运行程序时将它们添加到类路径中。然后程序在类路径中搜索任何类文件,并查看它们是否不是抽象的,不是接口,以及抽象类是否可以从该类分配。
- 将 jar 文件添加到类路径
- 启动程序
- 对于类路径中的每个(jar 文件中的类或类)
- 检查抽象类是否可以从类分配和
- 类不是抽象的不是接口
有没有图书馆或简单的方法可以做到这一点?恐怕这段代码可能有点容易出错。
更新:像这样的东西?
private static <T> Class<? extends T> loadSubclasses(Class<T> superClass)
更新:我认为这会成功
我想找到这些类以便以后使用它们。我认为这可以解决问题(仍然需要测试这段代码):
public static <T> Set<Class<? extends T>>
loadSubClasses(Class<T> superClass) {
return loadSubClasses(superClass,
ClasspathHelper.staticClassLoader());
}
public static <T> Set<Class<? extends T>> loadSubClasses(
Class<T> superClass, ClassLoader classLoader) {
Reflections reflections = new Reflections(classLoader);
return reflections.getSubTypesOf(superClass);
}