gpt4 book ai didi

带有构造函数的 Java 枚举。通过构造函数参数获取值的最佳方法

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:44:08 26 4
gpt4 key购买 nike

假设我有下面的枚举:

public enum RockPaperScissors {
R("Rock"),
P("Paper"),
S("Scissors");

private final String fullName;

RockPaperScissors(String fullName) {
this.fullName = fullName;
}

public String getFullName() {
return fullName;
}

public static RockPaperScissors getInstanceByFullName(String fullName) {
return Arrays.stream(values())
.filter(value -> value.getFullName().equals(fullName))
.findFirst().orElseThrow(() -> new IllegalArgumentException("No such value in the enum"));
}
}

两个都想要RockPaperScissors.valueOf("R")RockPaperScissors.getInstanceByFullName("Paper") 可以工作,因为我通过不同的数据提供者调用它们。

除了我编写的 getInstanceByFullName 方法,还有更好的替代方法吗?

编辑:我的问题是 Java enum API 是否提供了一些替代方法,显然它没有。正如 ernest_k 所建议的,我改进了 getInstanceByFullName 方法。

最佳答案

最简单的解决方案可能是维护一个静态的 Map<String, RockPaperScissors>在枚举中:

public enum RockPaperScissors {
R ("Rock"),
P ("Paper"),
S ("Scissors");

private static final Map<String, RockPaperScissors> byFullName = new HashMap<>();
private final String fullName;

RockPaperScissors(String fullName) {
this.fullName = fullName;
byFullName.put(fullName, this);
}

public String getFullName() {
return fullName;
}

public static RockPaperScissors getInstanceByFullName(String fullName) {
return byFullName.get(fullName);
}
}

本质上,您只需在加载枚举类时预先计算一个 Map,以便通过全名快速查找。

(不过,它是否真的比遍历所有值更快取决于枚举的大小。只有三个元素,循环可能会更快。)

关于带有构造函数的 Java 枚举。通过构造函数参数获取值的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55591953/

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