Способ динамической загрузки файлов классов Java

Что было бы хорошим способом динамической загрузки файлов классов Java, чтобы программа, скомпилированная в банку, могла читать все файлы классов в каталоге и использовать их, и как можно писать файлы, чтобы они имели необходимый пакет имя по отношению к банке?

Ответ 1

Я верю, что вам нужно ClassLoader.

Я предлагаю вам начать, посмотрев пример ниже, который загружает файлы классов, которые не находятся в пути к классу.

// Create a File object on the root of the directory containing the class file
File file = new File("c:\\myclasses\\");

try {
    // Convert File to a URL
    URL url = file.toURL();          // file:/c:/myclasses/
    URL[] urls = new URL[]{url};

    // Create a new class loader with the directory
    ClassLoader cl = new URLClassLoader(urls);

    // Load in the class; MyClass.class should be located in
    // the directory file:/c:/myclasses/com/mycompany
    Class cls = cl.loadClass("com.mycompany.MyClass");
} catch (MalformedURLException e) {
} catch (ClassNotFoundException e) {
}

Ответ 2

MyClass obj = (MyClass) ClassLoader.getSystemClassLoader().loadClass("test.MyClass").newInstance();
obj.testmethod();

или

MyClass obj = (MyClass) Class.forName("test.MyClass").newInstance();
obj.testmethod();

Ответ 3

Если вы добавляете каталог в свой путь к классу, вы можете добавлять классы после запуска приложения, и эти классы могут быть загружены, как только они будут записаны в каталог.