Библиотека Reflections позволит вам сделать это (в определенной степени):
Set<Class<? extends SomeClassOrInterface>> subTypes =
reflections.getSubTypesOf(SomeClassOrInterface.class);
Однако я бы не рекомендовал это. Представьте себе типичный classpath с 50 внешними банками, каждый из которых представляет собой большую структуру, такую как spring, hibernate, aspectj, jsf и т. Д. Это займет много времени.
Если вы хотите иметь какой-то механизм плагинов, чтобы другие могли реализовывать ваши интерфейсы и предоставлять jar с реализацией, тогда посмотрите на java.util.ServiceLoader