2013-05-15 5 views
0

Я хотел бы найти класс, соответствующий заданному шаблону во всех классах, загруженных в текущий момент.Поиск по имени

Например, я хотел бы сделать что-то вроде:

List<Class<?>> classess = getClassesFromPattern("*.Entity*"); 

И в результате я получаю:

com.package.EntityA 
com.package.EntityB 
com.package.EntityC 

Как бы осуществить это?

+1

* "Любая идея?" * 1) Задать *** конкретный *** вопрос. 2) Покажите нам, что вы пробовали. –

+3

Вы можете попробовать [получить список всех загруженных классов] (http://stackoverflow.com/questions/2548384/java-get-a-list-of-all-classes-loaded-in-the-jvm), затем просмотрите этот список. Лучшая ссылка: http://stackoverflow.com/questions/2681459/how-can-i-list-all-classes-loaded-in-a-specific-class-loader – assylias

ответ

1

Это легко с corn-cps

List<Class<?>> classes = CPScanner.scanClasses(new PackageNameFilter(
       "com.package"), new ClassNameFilter("*Entity*")); 
0

First do Instrumentation.getInitiatedClasses (ClassLoader) (см. http://docs.oracle.com/javase/6/docs/api/java/lang/instrument/Instrumentation.html#getInitiatedClasses(java.lang.ClassLoader)), который возвращает массив всех классов, для которых загрузчик является инициирующим загрузчиком. Если поставляемый загрузчик имеет значение null, возвращаются классы, инициированные загрузчиком класса загрузки. Теперь найдите свой шаблон в результате возврата методом getInitiatedClasses

0

Это не так просто, как вы хотите.

Class.forName() извлекает один класс в соответствии с указанным вами полным именем класса.

Вы можете анализировать свой путь к классам, читать все фрагменты пути класса, а затем читать классы как ресурсы (разные для файлов jar и простые каталоги) и искать классы в соответствии с шаблоном.

Хорошей новостью является то, что такая библиотека существует. Он называется Reflections. Он позволяет получать классы по различным критериям, включая реализованные интерфейсы, аннотации и (возможно) шаблон имени класса. Он также расширяется, и вы можете добавить свою собственную реализацию в соответствии с вашими потребностями.

Смежные вопросы