2

问题:我有一个外部用户可以实现的抽象类。这些类将在我的应用程序中使用。但是我事先并不知道这些课程。我想在运行时加载它们。

当前设置:当前设置是将类添加到一个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);
}
4

0 回答 0