gpt4 book ai didi

java - 从唯一实例值创建枚举工厂方法

转载 作者:搜寻专家 更新时间:2023-10-31 19:56:31 26 4
gpt4 key购买 nike

我创建了一个枚举来定义某些操作。针对外部 API 编程我被迫使用 Integer来表达这个 Action 。这就是为什么我在我的枚举中添加了一个整数实例字段。这应该与 Joshua Bloch 的 Effective Java 一致,而不是依赖于 ordinal()或使用 values()[index] 的枚举常量顺序.

public enum Action {

START(0),

QUIT(1);

public final int code;

Protocol(int code) {
this.code = code;
}
}

我得到一个整数值 what来自 API,现在我想从中创建一个 Enum 值,我该如何以最通用的方式实现它?

显然,添加这样的工厂方法是行不通的。您不能实例化枚举。

Action valueOf(int what) {
return new Action(what);
}

当然,我总是可以做一个 switch-case 语句并添加所有可能的代码并返回适当的常量。但我想避免同时在两个地方定义它们。

最佳答案

如果你要有很多,你可以使用 HashMap<Integer, Action> :

private static final Map<Integer, Action> actions = new HashMap<>(values().size, 1);

static {
for (Action action : values())
actions.put(action.code, action);
}

// ...

public static Action valueOf(int what) {
return actions.get(what);
}

如果您要拥有大量 Action,这将很有用。自 HashMap 以来的值查找是 O(1)。

关于java - 从唯一实例值创建枚举工厂方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14404840/

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