classloader class.forName может загрузить все классы внутри одного пакета, используя. * - PullRequest
0 голосов
/ 14 марта 2020

Спасибо, что помогли мне

Сегодня у меня очень простая проблема

Проблема:

В моем приложении при запуске я загружаю все классы внутри одного пакета, используя

Class.forName("org.codehaus.jackson.JsonGenerator$Feature");
............................
............................ and so on

Таким образом, я загрузил все классы, все в порядке, пока я не обновлю Jar, поэтому пакет Jar обновляется до другого имени пакета от org.codehaus.jackson до com.fasterxml.jackson. Поэтому я должен изменить class.forName код.

Требуемое решение: Возможен ли следующий код

Class.forName("com.fasterxml.jackson.*");

или есть какой-либо Другой способ загрузить все классы в одном пакете?

помогите пожалуйста:)

1 Ответ

0 голосов
/ 14 марта 2020

Class.forName("com.fasterxml.jackson.*"); невозможно,
документы очень четко об этом говорят, что параметр name должен быть:

name - полностью определенное имя требуемый класс

Кроме того, Class.forName возвращает один объект, представляющий класс за данным именем.

Ваш вопрос такой, если вы обновляете / обновляете файл jar, пакеты Джексона может быть одним из org.codehaus.jackson или com.fasterxml.jackson. Это странно, если вы хотите загружать классы Джексона динамически, и вы не уверены, что будет базовым пакетом для этих классов.

Но в любом случае, одним из решений было бы сканирование с помощью Reflections, если данное имя пакета содержит требуемые классы (или, по крайней мере, несколько из них, так что вы знаете, что пакет видим), как здесь:
Можете ли вы найти все классы в пакете, используя отражение?
И позже l oop через пакет с классами, чтобы инициализировать их с Class.forName.

...