我想让我的程序初始化变得更“智能”。
我有几个代表命令的类。所有这些类都是不可变的(即,对于整个应用程序来说,只创建每个类的一个实例就足够了)。所有这些类都实现
Command
接口。
我认为,一些类与一个带有main方法的类放在同一个jar中(甚至可能放在一个预定义的包中),并且这些类实现了一个已知的接口,这一事实应该提供足够的信息,使自动创建它们的实例成为可能。
如何实现此功能?(很明显,它与反射紧密相连,也可能与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()
?