Как я могу найти все реализации интерфейса в classpath? - PullRequest
11 голосов
/ 26 июня 2010

Я реализую интерфейс, и теперь я хотел бы получить все реализации этого интерфейса в classpath.Это возможно или я должен сделать что-то еще?

Ответы [ 2 ]

24 голосов
/ 26 июня 2010

Библиотека Reflections позволит вам сделать это (в определенной степени):

Set<Class<? extends SomeClassOrInterface>> subTypes = 
     reflections.getSubTypesOf(SomeClassOrInterface.class);

Однако я бы не рекомендовал это. Представьте себе типичный classpath с 50 внешними банками, каждый из которых представляет собой большую структуру, такую ​​как spring, hibernate, aspectj, jsf и т. Д. Это займет много времени.

Если вы хотите иметь какой-то механизм плагинов, чтобы другие могли реализовывать ваши интерфейсы и предоставлять jar с реализацией, тогда посмотрите на java.util.ServiceLoader

6 голосов
/ 26 июня 2010

В лучшем случае это будет дорого. В худшем случае (в зависимости от загрузчиков классов) это может быть невозможно.

Я настоятельно рекомендую вам найти альтернативный подход к основной проблеме, которую вы пытаетесь решить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...