У меня есть файл jar, и я могу перечислить все классы в банке. Классы в банке могут быть общедоступными, защищены или обладать пакетом. Интересно, можно ли рассказать о масштабах и перечислить только общедоступные классы?Список всех открытых классов в банке программно
ответ
Вы можете сделать это, и я могу думать о более чем только один способ, как это сделать, вот два:
Вы можете использовать инструмент манипулирования байткодом читать
.class
файлы и получить модификатор. Недостатком является то, что для этого вам нужна дополнительная библиотека. Поверхность заключается в том, что этот способ был бы вполне безопасным, так как вам не нужно загружать класс в виртуальную машину только в память, поэтому никакой код не выполняется, и если классы.jar
зависят от классов, которые недоступны, все еще работают.Вы можете использовать
ClassLoader
с этим.jar
и загрузить каждый из классов, а затем проверить его с помощью Reflection. Положительным моментом является то, что для этого вам не нужны никакие сторонние библиотеки. Недостатком является то, что для проверки классов они должны быть загруженыClassLoader
, что означает, что будет выполняться код этих классов (статические инициализаторы). Если это ненадежный сторонний код, вы сначала захотите установитьSecurityManager
в песочницу этих классов. Другой недостаток заключается в том, что если эти классы зависят от других классов, которые недоступны (например, путем расширения таких недоступных классов), этот подход потерпит неудачу.
Если вы уже список классов в банке, вы можете использовать интерфейс Reflection, чтобы получить объекты класса для этих классов по имени (String), а затем использовать интерфейс класса для определения свойств класс, например isPublic, isFinal или isStatic.
Быстрый поиск показывает:
http://tutorials.jenkov.com/java-reflection/classes.html#modifiers
- 1. Список всех открытых файлов
- 2. Список всех открытых свойств класса
- 3. Список всех файлов, открытых моим Android-приложением
- 4. Список всех открытых листов excel в combobox
- 5. C#: Список всех классов в сборке
- 6. пакет всех внешних классов в моей банке, с Eclipse
- 7. Список всех открытых проектов на Android Studio
- 8. Список всех открытых ручек для файлов?
- 9. Javascript: Как получить список всех открытых окон
- 10. Список всех классов БЕЗ Javadocs
- 11. список Android Multidex всех классов
- 12. Получить список всех родных классов
- 13. Как получить список всех классов ядра Java?
- 14. Как получить список всех открытых NSWindow из всех запущенных приложений?
- 15. Переопределение классов в банке в модулях Netbeans
- 16. Список всех классов функций в MXD
- 17. Список всех классов домена в Grails
- 18. Скриншот всех открытых окон
- 19. Закрытие всех открытых курсоров
- 20. Переменная, которая содержит «список всех открытых буферов» в Vim?
- 21. Список всех открытых рабочих книг в панели задач
- 22. список или имя всех открытых терминалов gnome в Linux
- 23. Прикрепление источника для некоторых классов в банке
- 24. java-файл без открытых классов
- 25. Класс открытых классов Windows Forms
- 26. Список всех конкретных или абстрактных классов объектов
- 27. Получить список всех имен классов шрифта awesome
- 28. JFileChooser нажмите на открытых программно
- 29. Eclipse: список методов и переменных всех классов
- 30. Список всех расширенных классов с их настройками
уверен, что это возможно. Например, вы можете загрузить классы с https://docs.oracle.com/javase/7/docs/api/java/lang/ClassLoader.html и использовать отражение, чтобы иметь модификаторы https://docs.oracle.com /javase/7/docs/api/java/lang/Class.html#getModifiers(). У вас уже есть код? – superbob
Классы имеют только области _public_ и _package_. –
@ Классы AndriyKryvtsun могут иметь защищенную область: 'public class Foo {protected static class Bar {} protected class Buzz {}}' В чем проблема с тем, что они также могут иметь закрытую область: 'public class Foo {private static class Bar {} частный класс Buzz {}} '. –