关于Java:获取枚举实例

Get Enum instance

本问题已经有最佳答案,请猛点这里访问。

我有一个Enum

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public enum Type {

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

    private final int id;

    Type(int id){
        this.id = id;      
    }

    public int getId() {
        return id;
    }
}

Mi-24 get a Type枚举会id物业?


您可以构建一个映射来执行此查找。

1
2
3
4
5
6
7
8
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);
}


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

1
2
3
4
5
6
7
8
9
10
11
12
13
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):

It would be better to loop and refer to the id field, so you're not duplicating the IDs.

1
2
3
4
5
6
7
8
Type fromId(int id) {
    for (Type t : values()) {
        if (id == t.id) {
            return t;
        }
    }
    return null;
}


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

1
2
3
4
5
6
7
8
9
public static Type getType(int id) {

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