gpt4 book ai didi

java - 从 Enum 中的类初始化一个新对象

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:42:56 25 4
gpt4 key购买 nike

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

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;
}

}

我想做的是遍历 Plugins 中的所有枚举,并从那些使用变量 c 的枚举中创建新对象,如下所示:

for (Plugins plugins : Plugins.values()) {
Class<?> c = plugins.getClassObject();
pluginList.add(new c(400, 400));
}

有没有办法用类似的方法来完成这个?我想要这样做的原因是创建一个类列表,当我启动我的应用程序时,这些类应该被添加到列表插件中。

最佳答案

由于您正在迭代插件,我想所有插件的构造函数都具有相同数量和类型的参数。 (虽然我不明白你的 plugins.add(...)。)

无论如何,如果您想使用枚举,我会执行以下操作,使用特定于常量的方法实现而不是类型标记/反射:

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 {
//...
}

然后你的循环看起来像这样:

List<Plugin> plugins = new ArrayList<Plugin>();

for (PluginTypes pt : PluginTypes.values()) {
plugins.add(pt.create(400, 400));
}

另一方面,如果您无论如何都知道插件的实现类,为什么不直接使用它们而不是通过 PluginTypes 枚举呢?

关于java - 从 Enum 中的类初始化一个新对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9825708/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com