问题: 我有一个外部用户可以实现的抽象类。这些类将在我的应用程序中使用。但是我事先并不知道这些课程。我想在运行时加载它们。
当前设置: 当前设置是在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);
}