Java 有没有一种简单的方法可以动态加载扩展抽象类的类?

Java 有没有一种简单的方法可以动态加载扩展抽象类的类?,java,dynamic,classloader,Java,Dynamic,Classloader,问题: 我有一个外部用户可以实现的抽象类。这些类将在我的应用程序中使用。但是我事先不知道这些课程。我想在运行时加载它们 当前设置: 当前的设置是在jar文件中添加类,并在运行程序时将它们添加到类路径中。然后,程序在类路径中搜索任何类文件,并查看它们是否是抽象的,而不是接口,以及它们是否可以从该类分配抽象类 将jar文件添加到类路径 启动程序 对于类路径中的每个(类或jar文件中的类) 检查抽象类是否可从类和 类不是抽象的,不是接口 有没有一个图书馆或者简单的方法可以做到这一点?恐怕这段代码有

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

当前设置: 当前的设置是在jar文件中添加类,并在运行程序时将它们添加到类路径中。然后,程序在类路径中搜索任何类文件,并查看它们是否是抽象的,而不是接口,以及它们是否可以从该类分配抽象类

  • 将jar文件添加到类路径
  • 启动程序
  • 对于类路径中的每个(类或jar文件中的类)
  • 检查抽象类是否可从类和
  • 类不是抽象的,不是接口
有没有一个图书馆或者简单的方法可以做到这一点?恐怕这段代码有点容易出错

更新: 像这样的

private static <T> Class<? extends T> loadSubclasses(Class<T> superClass)

私有静态类“加载”类是什么意思?正如您所建议的,泛型肯定不会在运行时执行类似的操作,至少是为了确保编译时的安全。根据您实际想要做的事情,反思可能是解决方案。您的问题可能已经得到了回答1,2.检查类:
AbstractPlugin.class.isAssignableFrom(clazz)
Modifier.isInterface(clazz.getModifiers())
Modifier.isassistract(clazz.getModifiers())
3。您应该使用一个特殊的插件目录并检查它是否有任何更改,或者您必须在类路径中保留所有以前扫描过的JAR的列表并进行检查以缩短启动时间。已解决。请参阅更新部分。谢谢你的关注。
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);
}