Can you find all classes in a package using reflection?
Можете ли вы найти все классы в пакете, используя отражение?
Возможно ли найти все классы или интерфейсы в данном пакете? (Быстрый просмотр, например, Package, может показаться, что нет.)
Переведено автоматически
Ответ 1
Из-за динамической природы загрузчиков классов это невозможно. Загрузчики классов не обязаны сообщать виртуальной машине, какие классы она может предоставить, вместо этого им просто передаются запросы для классов, и они должны возвращать класс или генерировать исключение.
Однако, если вы напишете свои собственные загрузчики классов или изучите пути к классам и их jars, найти эту информацию возможно. Однако это будет сделано с помощью операций файловой системы, а не отражения. Возможно, даже существуют библиотеки, которые помогут вам сделать это.
Если существуют классы, которые генерируются или доставляются удаленно, вы не сможете обнаружить эти классы.
Обычный метод заключается в том, чтобы вместо этого где-нибудь зарегистрировать классы, к которым вам нужен доступ, в файле или ссылаться на них в другом классе. Или просто используйте соглашение, когда дело доходит до именования.
Дополнение: Библиотека Reflections позволит вам искать классы в текущем пути к классам. Его можно использовать для получения всех классов в пакете: