gpt4 book ai didi

java - 从未知字符串中检索枚举值

转载 作者:行者123 更新时间:2023-12-01 16:31:13 26 4
gpt4 key购买 nike

我有一个中等大小的枚举,我想从给定的字符串中检索值。例如,

GAUL_RAM("gaul_ram.schem", new Location(Bukkit.getWorld(Statics.worldName), 0, 100, 0)),
GAUL_RAM_UPGRADED("gaul_ram_upgraded.schem", new Location(Bukkit.getWorld(Statics.worldName), 0, 100, 0)),
GREEK_RAM("greek_ram.schem", new Location(Bukkit.getWorld(Statics.worldName), 0, 100, 0)),
GREEK_RAM_UPGRADED("greek_ram_upgraded.schem", new Location(Bukkit.getWorld(Statics.worldName), 0, 100, 0)),
PERSIA_RAM("persia_ram.schem", new Location(Bukkit.getWorld(Statics.worldName), 0, 100, 0)),
PERSIA_RAM_UPGRADED("persia_ram_upgraded.schem", new Location(Bukkit.getWorld(Statics.worldName), 0, 100, 0)),
CARTHAGE_RAM("carthage_ram.schem", new Location(Bukkit.getWorld(Statics.worldName), 0, 100, 0)),
CARTHAGE_RAM_UPGRADED("carthage_ram_upgraded.schem", new Location(Bukkit.getWorld(Statics.worldName), 0, 100, 0));

我有上面的枚举。我可能会传递一个诸如“persia”之类的值。然后我想做的是从 Persia 常量 PERSIA_RAM 中提取字符串值,以及它的Location对象。

但是,我没有看到一种“干净”的方法来做到这一点。我想到的解决方案是检查提供的字符串“persia”,通过 Object[] possibleValues = enumValue.getDeclaringClass().getEnumConstants().toString().toLowerCase(); 迭代枚举中的所有值。 ,然后在下划线“_”上使用某种分隔符来获取枚举常量中的第一个单词。

再说一遍,这不是一个巧妙的解决方案。有没有更好的方法来完成这个任务?

最佳答案

您可以在加载类时创建一个 String 的 HashMap 来进行枚举,这样您就不必每次要查找枚举值时都执行字符串操作。下面是我将如何执行此操作的示例:

public class Testing {
public static final HashMap<String, Enum> map = new HashMap<>();

public static void main(String[] args) {
for (Enum e : Enum.values()) {
map.put(e.toString().toLowerCase().split("_")[0], e);
}

System.out.println(map.get("persia").getString());
}

public enum Enum {
GAUL_RAM("gaul_ram.schem", new Location(Bukkit.getWorld(Statics.worldName), 0, 100, 0)),
GAUL_RAM_UPGRADED("gaul_ram_upgraded.schem", new Location(Bukkit.getWorld(Statics.worldName), 0, 100, 0)),
GREEK_RAM("greek_ram.schem", new Location(Bukkit.getWorld(Statics.worldName), 0, 100, 0)),
GREEK_RAM_UPGRADED("greek_ram_upgraded.schem", new Location(Bukkit.getWorld(Statics.worldName), 0, 100, 0)),
PERSIA_RAM("persia_ram.schem", new Location(Bukkit.getWorld(Statics.worldName), 0, 100, 0)),
PERSIA_RAM_UPGRADED("persia_ram_upgraded.schem", new Location(Bukkit.getWorld(Statics.worldName), 0, 100, 0)),
CARTHAGE_RAM("carthage_ram.schem", new Location(Bukkit.getWorld(Statics.worldName), 0, 100, 0)),
CARTHAGE_RAM_UPGRADED("carthage_ram_upgraded.schem", new Location(Bukkit.getWorld(Statics.worldName), 0, 100, 0));

private String arg0;
private Location arg1

private Enum (String s, Location l) {
arg0 = s;
arg1 = l
}

public String getString() {
return arg0;
}

public Location getLoc() {
return arg1;
}
}
}

这将返回:

persia_ram_upgraded.schem

请注意,这确实会在某些枚举值之间留下一些歧义。例如,PERSIA_RAMPERSIA_RAM_UPGRADED 都对应于字符串 "persia"。我建议要么进行一些重命名,要么重新考虑如何访问枚举值。

关于java - 从未知字符串中检索枚举值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62035033/

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