Reflection
1) Есть имя пакета. По нему нужно найти все классы, находящиеся в данном пакете в classpath.
2) Есть суперкласс и по нему нужно найти всех видимых в classpath подклассов.
Заранее благодарен за ответы.
Цитата: tanatoss
Вопрос у меня казалось бы простой, но тем не менее прямого ответа в джавадоке я не нашел.
1) Есть имя пакета. По нему нужно найти все классы, находящиеся в данном пакете в classpath.
2) Есть суперкласс и по нему нужно найти всех видимых в classpath подклассов.
Заранее благодарен за ответы.
1) Есть имя пакета. По нему нужно найти все классы, находящиеся в данном пакете в classpath.
2) Есть суперкласс и по нему нужно найти всех видимых в classpath подклассов.
Заранее благодарен за ответы.
В точности такая же задача ставится, когда реализуется автодополнение кода в IDE после import java. Ctrl + Space. Возможно, имеет смысл посмотреть их исходники/ задать вопрос на их форуме.
Есть мнение, что через рефлексию (по крайней мере стандартную) этого нельзя сделать.
Задача вобщем-то была тривиальная - реализовать поддержку плагинов. Но хотелось ее сделать поэллегантнее. А теперь прийдется юзать properties файлы с описанием плагинов.
По суперклассу потомков найти трудее, т.к. они могут быть раскиданы по разным пакетам.
Цитата: Archie
А чего просто в classpath-е не посмотреть, какие классы лежат в подкаталогах пакета?
По суперклассу потомков найти трудее, т.к. они могут быть раскиданы по разным пакетам.
По суперклассу потомков найти трудее, т.к. они могут быть раскиданы по разным пакетам.
Classpath для конечной программы берется из нескольких разных источников - а как из программы узнать их все?
Я этим вопросом как-то особо не задавался раньше.
Мне кажется, что скорее всего IDE делают полный поиск и индексацию по всем источникам... Хотя полностью не уверен - но не рефлексия точно.
Исходники открыты, все что нужно можно посмотреть.
Но это оверкил. Хотелось сначала найти готовое решение в стандартной
библиотеке
К сожалению 1) Я не нашел, хотя перерыл все стандартные методы. 2) Готового решения никто не знает - спрашивал на нескольких форумах и вживую у уважаемых мной прогеров. 3) Индексация не подходит поскольку зохавает весь перфоманс который и так не очень то хорош. В ИДЕ классно тем что все кешируется в метафайлах, а мне пришлось бы хранить все это в памяти. Слишком большая цена для такой задачи.
Не сталкивался никогда с такой необходимостью, если честно, на практике.
Мне пришлось сканировать classpath.
если java 5 и она SUNовская, можно поробовать аннотации