Я должен был сделать это. На самом деле, что-то намного тяжелее, чем это, потому что иногда "именем" был бы "Smith, John" или "Smith John" вместо "John Smith", или не именем человека вообще, но вместо этого названием компании. И это должно было сделать это автоматически без возможности для пользователя исправить его.
то, Что я закончил тем, что делал, придумывало конечный список шаблонов, как которые имя могло быть в:
Наконец, Первая Средняя Начальная буква
Первый Последний
Первая Средняя Начальная буква В последний раз
Наконец, Первая середина
Первая середина В последний раз
Первый Последний
Добавляют Вашего г-на, Jr, там также. Скажем, Вы заканчиваете приблизительно с дюжиной шаблонов.
Мое приложение имело словарь общего имени, общие фамилии (можно найти их в сети), общие заголовки, общие суффиксы (младший, сэр, md) и использование, которое было бы в состоянии высказать очень хорошие предположения о шаблонах. Я не настолько умен, моя логика не была то, что воображение, и все же тем не менее, не случалось так, что трудно для создания некоторой логики, которая угадала больше чем 99% времени.
В качестве альтернативы вы можете использовать корневой каталог класса в качестве отправной точки и пройтись по всем файлам * .class и подкаталогам. Это будет работать только в том случае, если вы заранее знаете, где будут находиться все ваши файлы .class.
Причина всего этого в том, что Java имеет динамическую загрузку классов, поэтому классы могут загружаться во время выполнения из мест, неизвестных во время компиляции или даже при запуске время. Поэтому концепция пакета - это просто пространство имен для загруженных классов, а не каталог, который вы можете использовать для их поиска.
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.