在Enum中从类初始化一个新对象

jns*_*brg 6 java enums

我有一个名为插件的枚举:

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?