Как указать путь к файлу .class, который будет динамически загружен в его файловую систему? - PullRequest
0 голосов
/ 16 марта 2020

Когда программа java динамически загружает файл .class,

  • Требуется только полное имя класса файла .class? Требует ли ClassLoader s метод loadClass() только полного определения имени класса файла .class для динамической загрузки?

  • Если файл .class может находиться в любом месте файловой системы, как я могу указать его путь в своей файловой системе?

  • При запуске такого байт-кода создайте из Java программы с помощью команды java, мне нужно указать путь к. Файл класса для динамической загрузки в -cp?

Спасибо.

1 Ответ

2 голосов
/ 19 марта 2020

Вы объединяете классы и файлы ".class".

Требуется ли только полное имя класса файла .class? Требует ли метод ClassCoader loadClass (), чтобы только динамически загружалось полное имя класса файла .class?

Требуется полное имя класса класса .

Если файл .class может находиться в любом месте файловой системы ...

Этого не может быть! Файл .class, соответствующий классу, должен находиться в пути к соответствующему загрузчику классов.

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

  • Если вы используете один из стандартных Реализации загрузчика классов, он будет использовать стандартную схему для разрешения местоположения файла .class на основе имен пакетов классов.

  • Можно было бы реализовать собственный загрузчик классов, который разрешает имена классов FQ в файл системные объекты ... каким-то другим способом. Но это кажется ненужным, поскольку стандартный Java компилятор будет генерировать .class файлов по стандартной схеме.

При запуске такой байт-код создается из Java программа с командой java, мне нужно указать путь к файлу .class для динамической загрузки в -cp?

Вы не указываете местоположение файла .class. Вы указываете местоположение каталога, в котором файл .class может быть разрешен, как указано выше.

Но если работающая Java программа генерирует, компилирует и затем загружает класс, ей потребуется динамически создайте новый загрузчик классов, чтобы загрузить его ... надежно.

Почему? Потому что загрузчики классов обычно кэшируют содержимое каталогов и индексов JAR на пути к классам. Поэтому, когда программа пишет новый файл, загрузчик классов может не узнать об этом.

Существует также проблема, заключающаяся в том, что загрузчик классов не может загрузить один и тот же класс (из любого места) дважды.

Наконец, учтите, что если два загрузчика классов загружают класс с одинаковым полностью определенным именем, система типов времени выполнения обрабатывает их как отдельные классы / типы. Вы не можете разыграть между двумя воплощениями типа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...