gpt4 book ai didi

Java 启动时动态枚举

转载 作者:行者123 更新时间:2023-11-29 08:20:50 25 4
gpt4 key购买 nike

出于示例目的,我从 jenkov 那里窃取了以下枚举..

public enum Level {
HIGH (3, 33, 333),
MEDIUM(2, 22, 222),
LOW (1, 11, 111);
}

因此很少有数字可以导致相同的枚举类型,1 和 11 都会返回 LOW。我已经实现了这一点。

实际的问题是,枚举值(它们叫什么?比如 1, 11, 111)可以是动态的吗?看来这里需要的列表会随着时间的推移而改变,最好的解决方案是在启动时加载新列表。

所以理想的解决方案是这样的

public enum Level {
HIGH (listHigh),
MEDIUM(listMedium),
LOW (listLow);
}

这些列表将在启动时由@Configuration @Bean加载

但是枚举是静态的,即使使用 static int array[] = { 1, 2, 3, 4, 5 };我得到非法的前向引用。

我知道我省略了很多代码,但我认为问题非常简单。只要我找到某种方法来动态加载枚举的值,我就可以实现此解决方案的所有其他内容。

请询问我可能在这里错过的任何信息,谢谢

最佳答案

我不了解 Spring 方面,但通常有两种方法可以处理这个问题。

一种方法是使用枚举的构造函数(您可以显式编写该构造​​函数)来查找配置选项:

public enum Level {
HIGH,
MEDIUM,
LOW;

private final int whatever;

Level() {
this.whatever = someCodeToLoadFromConfig(name());
}
}

第二个是根本不在枚举中包含这些值,而是保留所需选项的 EnumMap:

public enum Level {
HIGH,
MEDIUM,
LOW,
}

EnumMap<Level, LevelSettings> levels = new EnumMap<>(Level.class);
for (Level level : Level.values()) {
levels.put(level, someCodeToLoadFromConfig(level.name());
}

第二个有一个主要优点,那就是很容易创建在单元测试中使用的替代选项。这就是我推荐的。

更好的是:为什么要使用枚举?只需包含一个级别级别,并指定其名称(“Easy”等)和设置(1、11 等)。在启动时创建一个列表,然后就可以了。这样,当您添加 Epic 关卡设置时,您无需提示更改开关。

关于Java 启动时动态枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58713107/

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