我有一个名为插件的枚举:
public enum Plugins {
ROTATING_LINE (plugin.rotatingline.RotatingLine.class),
SNOW_SYSTEM (plugin.snow.SnowSystem.class);
private Class<?> c;
private Plugins (Class<?> c) {
this.c = c;
}
public Class<?> getClassObject() {
return c;
}
}
Run Code Online (Sandbox Code Playgroud)
我想要做的是循环遍历所有枚举Plugins并使用变量创建新对象,c如下所示:
for (Plugins plugins : Plugins.values()) {
Class<?> c = plugins.getClassObject();
pluginList.add(new c(400, 400));
}
Run Code Online (Sandbox Code Playgroud)
有没有办法用类似的方法完成这个?我想这样做的原因是创建一个类列表,当我启动我的应用程序时应该添加到List插件.
Dav*_*Far 11
由于您正在迭代插件,我想所有插件的构造函数都具有相同数量和类型的参数.(我不明白你的意思plugins.add(...).)
无论如何,如果你想使用Enums,我会使用常量特定的方法实现而不是类型标记/反射来执行以下操作:
public enum PluginTypes {
ROTATING_LINE { Plugin create(int x, int y){
return new plugin.rotatingline.RotatingLine(x,y);} },
SNOW_SYSTEM { Plugin create(int x, int y){
return new plugin.snow.SnowSystem(x,y);} };
abstract Plugin create(int x, int y);
}
public interface Plugin {
//...
}
Run Code Online (Sandbox Code Playgroud)
然后你的循环看起来像这样:
List<Plugin> plugins = new ArrayList<Plugin>();
for (PluginTypes pt : PluginTypes.values()) {
plugins.add(pt.create(400, 400));
}
Run Code Online (Sandbox Code Playgroud)
另一方面,如果您知道插件的实现类,为什么不直接使用它们而不是通过PluginTypes Enum?