| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Java: Общие вопросы > Список классов пакета |
| Автор: last 4.7.2006, 10:37 |
| Вот такая проблема, есть название пакета(package) , строка скажем, требуется получить список классов пакета, причем и видимых снаружи пакета (public то есть) так и доступных только в пакете. Пакет есть в нашем classpath , разумеется. Если, напимер, есть имя класса, то можно с помощью reflection получить его поля, методы, конструкторы и пр. это я знаю как делать, а вот как с package --- ума не приложу |
| Автор: redrick 4.7.2006, 13:42 |
| поищи по этому разделу и еще по j2me - помню это обсуждалось |
| Автор: Bulat 4.7.2006, 19:06 |
| .....Млин за секунду из головы вылетело ладно как вспомню отпишу......... |
| Автор: djGri 5.7.2006, 09:35 |
| Вот нашел кое-что http://java.sun.com/j2se/1.5.0/docs/guide/javadoc/doclet/spec/com/sun/javadoc/PackageDoc.html |
| Автор: last 5.7.2006, 12:04 | ||
Не то это, это апи для JavaDoc, про то как доклеты свои для генерации писать. Как это можно применить в этом случае, незнаю. Кстати, про JavaDoc. Если он есть для данного пакета, то список классов можно получить путем анализа листинга директории с JavaDoc этого package (ls -l /java/util и тд). Такой вот обходной путь Уверен, что проще способ должен быть. Браузеры классов в IDE показывают список классов для пакета без всякого JavaDoc. Вот только как? |
| Автор: djGri 5.7.2006, 13:26 | ||
А если так
|
| Автор: last 5.7.2006, 14:08 |
| Т.е, как я понимаю предлагается следующее: берутся все *.class из classpath, из директорий и jar (jar тоже можно рассматривать как запакованное дерево каталогов) и анализирутся пути до корня и имена файлов. находим в classpath package.jar, к примеру, со следующей структурой +- | +com | +mysite | Super.class находим рекурсивным перебором Super.class, а путь до него --- будет имя пакета, имеем com.mysite.Super , запоминаем и так далее после перебора у нас будет дерево классов, распределенных по пакетам. Так проблему можно решить, конечно, но придется перебирать весь classpath, долго это будет и не изящно. Видимо по другому нельзя. Или можно? |
| Автор: Bulat 6.7.2006, 11:44 |
| djGri, млин, пока освободился опередил. last, если узнаешь другой способ попроще, дашь знать. |
| Автор: LSD 6.7.2006, 21:59 |
| Однозначного решения проблема не имеет. Т.к. классы могут быть в нескольких jar-ах, могут лежать россыпью в папках, могут загружаться по сети (для апплетов например), могут загружаться из базы данных (например Oracle-овский загрузчик классов), плюс комбинация всего вышеперечисленного. |
| Автор: djGri 7.7.2006, 12:51 |
| Для решения этой задачи, пока не существует APIs. Есть несколько решений, но все они похожие на мое Вот тут http://forum.java.sun.com/thread.jspa?threadID=341935&tstart=0 |