gpt4 book ai didi

java - Enums 共享静态查找方法

转载 作者:IT老高 更新时间:2023-10-28 21:12:51 26 4
gpt4 key购买 nike

我有以下枚举:

public enum MyEnum{
A(10, "First"), //
B(20, "Second"), //
C(35, "Other options");

private Integer code;
private String description;

private MyEnum(Integer code, String description) {
this.code = code;
this.description = description;
}

public Integer getCode() {
return code;
}

public String getDescription() {
return description;
}

public static MyEnum getValueOf(Integer code) {
for (MyEnum e : MyEnum.values()) {
if (e.getCode().equals(code)) {
return e;
}
}
throw new IllegalArgumentException("No enum const " + MyEnum.class.getName() + " for code \'" + code
+ "\'");
}
}

效果很好。 getValueOf 方法的存在是因为在与外部合作伙伴通信时,我们只获取要映射到的代码(他们选择)。我需要描述,因为我需要在 GUI 中显示一个有意义的短语。

但我现在有许多类似的枚举类。都有自己的代码和描述,他们需要相同的查找功能。我希望 getValueOf 方法是通用的,因此我不需要为基本相同的方法支持 30 多个不同的枚举。

为了解决这个问题,我想创建一个抽象类来定义这个方法并实现一些常见的逻辑,但这是不可能的,因为我无法扩展 Enum

然后我尝试用以下方法制作一个 Utility 类:

public static <T extends Enum<T>> T getValueOf(Enum<T> type, Integer code) {...}

但是带有枚举的泛型令人困惑,我不明白如何让它工作。

基本上我想知道的是:为枚举定义通用实用程序的好方法是什么?

最佳答案

您需要将实际的枚举类对象作为参数传递给您的方法。然后您可以使用 Class.getEnumConstants() 获取枚举值。

为了能够在实例上访问 getCode(),您应该在接口(interface)中定义它并让所有枚举类型都实现该接口(interface):

interface Encodable {
Integer getCode();
}

public static <T extends Enum<T> & Encodable> T getValueOf(Class<T> enumClass, Integer code) {
for (T e : enumClass.getEnumConstants()) {
if (e.getCode().equals(code)) {
return e;
}
}
throw new IllegalArgumentException("No enum const " + enumClass.getName() + " for code \'" + code
+ "\'");
}

...

public enum MyEnum implements Encodable {
...
}

MyEnum e = getValueOf(MyEnum.class, 10);

关于java - Enums 共享静态查找方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10121988/

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