gpt4 book ai didi

java - 删除枚举中的 Switch 语句

转载 作者:行者123 更新时间:2023-11-30 06:22:13 26 4
gpt4 key购买 nike

对于竞技场游戏,我有一个可能的游戏类型的枚举。这些游戏类型中的每一个都有一个与其关联的变体列表以及每个枚举的 2 个类,用于监听事件和处理配置值。目前,我从枚举构建这些监听器和配置加载器。在这样做时,我必须使用 switch 语句。以下方法从枚举值获取监听器。

public GameListener getListener(CustomGame cg) {
switch(this) {
case Slayer:
return new SlayerListener(cg);
case Capture_The_Flag:
return new CaptureTheFlagListener(cg);
case Oddball:
return new OddballListener(cg);
case HeadHunter:
return new HeadHunterListener(cg);
case King_Of_The_Hill:
return new KOTHListener(cg);
default:
return null;
}
}

配置存在类似的代码。我知道使用抽象方法可以删除 switch 语句,但我想知道是否有更简单的方法。我试图让我的枚举接受 2 个类型参数,但我无法让它工作,而且我无法用它们构造。一种选择是传入 Class<T>并通过反射构造对象。

这个类中还有另一种方法,每个枚举都有非常不同的布局,我认为最好的选择是抽象方法,但我觉得这里有一个更简单的解决方案。

最佳答案

这有点冗长,但您可以直接在枚举类型上提供工厂方法:

public enum GameType {
SLAYER {
@Override
public GameListener getListener(CustomGame cg)
return new SlayerListener(cg);
}
},
// ... similarly for other GameListener types

public abstract GameListener getListener(CustomGame cg);
}

此解决方案的优点在于,如果不定义 getListener() 方法的实现,现在就不可能创建新的 GameType

关于java - 删除枚举中的 Switch 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19644497/

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