gpt4 book ai didi

java - 获取与 int 值关联的枚举

转载 作者:IT老高 更新时间:2023-10-28 11:42:22 26 4
gpt4 key购买 nike

以前,我将 LegNo 枚举简单定义为:

NO_LEG, LEG_ONE, LEG_TWO

通过调用return LegNo.values()[i];,我能够得到与每个枚举相关的值。

但现在我决定我希望 LegNo 枚举 NO_LEG 是 int -1 而不是 0所以我决定使用私有(private)构造函数来初始化并设置它的 int 值

NO_LEG(-1), LEG_ONE(1), LEG_TWO(2);

private LegNo(final int leg) { legNo = leg; }

现在唯一的事情是,因为我是这样做的,所以 values() 方法不适用于 NO_LEG 枚举。如何获取与 int 关联的枚举?除了使用 case switch 语句或 if-elseif-elseif

之外,还有其他有效的方法吗?

我可以看到很多与从枚举中获取 int 值有关的 SO 问题,但我追求的是相反的。

最佳答案

2018 年 8 月编辑

今天我将实现如下

public enum LegNo {
NO_LEG(-1), LEG_ONE(1), LEG_TWO(2);

private final int value;

LegNo(int value) {
this.value = value;
}

public static Optional<LegNo> valueOf(int value) {
return Arrays.stream(values())
.filter(legNo -> legNo.value == value)
.findFirst();
}
}

您必须在枚举中维护一个映射。

public enum LegNo {
NO_LEG(-1), LEG_ONE(1), LEG_TWO(2);

private int legNo;

private static Map<Integer, LegNo> map = new HashMap<Integer, LegNo>();

static {
for (LegNo legEnum : LegNo.values()) {
map.put(legEnum.legNo, legEnum);
}
}

private LegNo(final int leg) { legNo = leg; }

public static LegNo valueOf(int legNo) {
return map.get(legNo);
}
}

静态 block 只会被调用一次,所以这里实际上没有性能问题。

编辑:将该方法重命名为 valueOf,因为它与其他 Java 类更加内联。

关于java - 获取与 int 值关联的枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11047756/

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