获取枚举实例 [重复]

Posted

技术标签:

【中文标题】获取枚举实例 [重复]【英文标题】:Get Enum instance [duplicate] 【发布时间】:2016-08-28 17:48:08 【问题描述】:

我有一个Enum

public enum Type 

    ADMIN(1), 
    HIRER(2), 
    EMPLOYEE(3);

    private final int id;

    Type(int id)
        this.id = id;       
    

    public int getId() 
        return id;
    

如何通过 id 属性获得 Type 枚举?

【问题讨论】:

您可以迭代Type 值并查找您的id;或填写Map<Integer, Type> This might be exactly what you need.(除了你有一个int id而不是String text 【参考方案1】:

Type 类中创建一个返回Enum 实例的方法:

Type get(int n) 
    switch (n) 
    case 1:
        return Type.ADMIN;
    case 2:
        return Type.EMPLOYEE;
    case 3:
        return Type.HIRER;
    default:
        return null;
    


提示:您需要在switch-case 中添加default 或在方法末尾添加return null 以避免编译器错误。


更新(感谢@AndyTurner):

最好循环引用 id 字段,这样就不会重复 ID。

Type fromId(int id) 
    for (Type t : values()) 
        if (id == t.id) 
            return t;
        
    
    return null;

【讨论】:

最好循环引用id字段,这样就不会重复ID。 @AndyTurner 更新了答案......但是......为什么你说我在复制身份证?我错过了什么?或者你的意思是每个id写一行?? @brimborium 是的,但那是彼得的回答...... @JordiCastilla 我刚看到。 ;) 注意:每次调用 values() 时,它都会创建一个新的枚举值数组。它必须这样做,因为它不知道你是否要对其进行变异。【参考方案2】:

您可以构建一个地图来进行此查找。

static final Map<Integer, Type> id2type = new HashMap<>();
static 
    for (Type t : values())
        id2type.put(t.id, t);

public static Type forId(int id) 
    return id2type.get(id);

【讨论】:

我最喜欢这个解决方案。它很干净,对于任意大的枚举具有最佳性能。【参考方案3】:

试试这个。我创建了一个使用 id 搜索类型的方法:

public static Type getType(int id) 

    for (Type type : Type.values()) 
        if (id == type.getId()) 
            return type;
        
    
    return null;

【讨论】:

以上是关于获取枚举实例 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何获取枚举的属性[重复]

如何在枚举中获取枚举值的 int [重复]

获取枚举值[重复]

Swift:枚举编码如何获取原始值[重复]

在Java枚举中使用lombok @Getter注解[重复]。

如何从 EventLogEntryType 枚举中获取 int 值 [重复]