Как динамически загружать классы из файла JAR - PullRequest
0 голосов
/ 24 февраля 2020

Если у меня есть jar-файл, который содержит много классов, как получить классы и создать экземпляры во время выполнения. В этом коде я не понимаю строку Class.forName, MyClass - это тот класс, который содержит файл jar, или тот класс, который будет создан после загрузки файла jar?

URLClassLoader child = new URLClassLoader(
        new URL[] {myJar.toURI().toURL()},
        this.getClass().getClassLoader()
);
Class classToLoad = Class.forName("com.MyClass", true, child);
Method method = classToLoad.getDeclaredMethod("myMethod");
Object instance = classToLoad.newInstance();
Object result = method.invoke(instance);

1 Ответ

0 голосов
/ 24 февраля 2020

Class.forName загружает класс.

Первый параметр - это (каноническое) имя класса. В этом случае вы пытаетесь загрузить класс com.MyClass.

Второй параметр указывает, что класс должен быть инициализирован в этой точке (static переменные инициализируются и static блоки выполняются.

Третий параметр - это ClassLoader, из которого будет загружен класс. В вашем случае он попытается найти класс из myJar, но если класс там не найден, он попытается загрузить класс из того же ClassLoader вызывающий класс был загружен.

...