java - 使用唯一属性检索枚举值

标签 java dictionary enums

是否可以创建一个通用方法或类来从给定的唯一属性(具有 getter 方法的字段)中检索枚举值?

所以你会:

public enum EnumToMap {
    E1("key1"),
    E2("key2"),
    ;

    private final String key;

    private EnumToMap(String key) {
        this.key = key;
    }

    public String getKey() {
        return key;
    }
}

所以需要的是与

相同的功能
public static EnumToMap getByKey(String key)
    ...

会提供。最好没有反射并尽可能通用(但在这种情况下,可能无法创建没有反射的通用解决方案)。

澄清:所以这个方法应该适用于多个枚举。这个想法是不必一遍又一遍地实现查找。

最佳答案

实际上只需要泛型和接口(interface)就可以实现。

创建并实现接口(interface)

interface WithKeyEnum {
    String getKey();
}

enum EnumToMap implements WithKeyEnum {
    ...

    @Override
    public String getKey() {
        return key;
    }
}

实现

public static <T extends Enum<T> & WithKeyEnum> T getByKey(Class<T> enumTypeClass, String key) {
    for (T type : enumTypeClass.getEnumConstants()) {
        if (type.getKey().equals(key)) {
            return type;
        }
    }
    throw new IllegalArgumentException();
}

用法

EnumToMap instanceOfE1 = getByKey(EnumToMap.class, "key1");

关于java - 使用唯一属性检索枚举值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26170107/

相关文章:

java - PlayN 入门教程存在问题

python - 如何按相同字段合并字典列表并在此过程中对另一个字段求​​和?

c++ - 类枚举的正确位置

java - 检查字符串是否包含在枚举集中,时间复杂度为 O(1)

python - 如何将 "value"属性强类型为 str 或自定义类型?

java - Firefox 未在 Windows 机器上的首选项中更新应用程序关联

java - 将 ReactJS 前端添加到我的 REST API

python - 为什么我的代码继续使用 else 语句?

dictionary - 在android中向谷歌地图添加按钮

java - 如何在程序中从命令行使用数学运算符?