Существует ли способ вынудить classloader загрузить пакет, даже если ни один из его классов не был загружен?

Я должен был сделать это. На самом деле, что-то намного тяжелее, чем это, потому что иногда "именем" был бы "Smith, John" или "Smith John" вместо "John Smith", или не именем человека вообще, но вместо этого названием компании. И это должно было сделать это автоматически без возможности для пользователя исправить его.

то, Что я закончил тем, что делал, придумывало конечный список шаблонов, как которые имя могло быть в:
Наконец, Первая Средняя Начальная буква
Первый Последний
Первая Средняя Начальная буква В последний раз
Наконец, Первая середина
Первая середина В последний раз
Первый Последний

Добавляют Вашего г-на, Jr, там также. Скажем, Вы заканчиваете приблизительно с дюжиной шаблонов.

Мое приложение имело словарь общего имени, общие фамилии (можно найти их в сети), общие заголовки, общие суффиксы (младший, сэр, md) и использование, которое было бы в состоянии высказать очень хорошие предположения о шаблонах. Я не настолько умен, моя логика не была то, что воображение, и все же тем не менее, не случалось так, что трудно для создания некоторой логики, которая угадала больше чем 99% времени.

15
задан mpobrien 29 November 2009 в 20:51
поделиться

2 ответа

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

Причина всего этого в том, что Java имеет динамическую загрузку классов, поэтому классы могут загружаться во время выполнения из мест, неизвестных во время компиляции или даже при запуске время. Поэтому концепция пакета - это просто пространство имен для загруженных классов, а не каталог, который вы можете использовать для их поиска.

11
ответ дан 1 December 2019 в 03:34
поделиться

I'm afraid that your assumptions are not valid. Classloaders do package book-keeping as they load classes.

You can pass a wildcard to ClassLoader.getResources and force it to pick up the classes in a package, which will in turn do the work.

You can make your own ClassLoader that calls definePackage, but that won't help you with the usual vanilla classloaders in use.

5
ответ дан 1 December 2019 в 03:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: