Я хочу сделать мою инициализацию программы немного «умнее».
У меня есть несколько классов, которые представляют команды.Все эти классы являются неизменяемыми (т.е. создания только одного экземпляра каждого должно быть достаточно для всего приложения).Все эти классы реализуют интерфейс Command
.
Я думаю, что тот факт, что некоторые классы размещены в одном банке с классом с методом main (может быть, даже в 1 предопределенном пакете) и что эти классы реализуют один известный интерфейс, должен дать достаточно информации, чтобы сделать егоМожно автоматизировать создание своих экземпляров.
Как я могу реализовать эту функцию?(Очевидно, что это что-то тесно связано с отражением, и, возможно, с механизмами загрузки классов Java, но я не эксперт в этих областях).
Я хочу иметь что-то вроде этого:
public static void init() {
...
Map<String, Command> commands = Maps.newHashMap();
for (Class clazz : findCommandImplementationsInThisJarFile()) {
//some try/catch stuff is ommited
Command command = clazz.newInstance();
commands.put(command.getName(), command);
}
...
}
Как реализовать хитрый метод findCommandImplementationsInThisJarFile()
?