Если вы хотите искать все подклассы класса, вы можете использовать рефлексию, как говорит Джеффри.Однако вместо того, чтобы писать код, чтобы сделать это самостоятельно, или копировать и вставлять его из некоторой случайной статьи, я бы использовал ResolverUtil из веб-фреймворка Stripes , который делает именно то, чтоВы хотите (и больше!).
Альтернативой сканированию пути к классам может быть создание реестра во время выполнения.Вы можете создать базовый класс следующим образом:
public abstract class SuperClass {
private static final Set<Class<? extends SuperClass>> SUB_CLASSES = new HashSet<Class<? extends SuperClass>>();
/* instance initializer */ {
SUB_CLASSES.put(getClass());
}
}
Каждый созданный экземпляр подкласса будет добавлять себя в набор подклассов.Ваша фабрика может затем использовать этот набор.Все, что вам нужно сделать, это убедиться, что все подклассы созданы в какой-то момент - возможно, с помощью файла конфигурации или с помощью действий при запуске других частей вашей системы.