按int值设置枚举

时间:2017-12-05 14:09:07

标签: java android enums

我有一个public enum DayType { REGULAR(1), VACATION(2), SICK(3); private final int value; private DayType(int value) { this.value = value; } public int getValue() { return value; } } 值的枚举用于存储在DB中:

private DayType dayType

public void setDayType(int dayType) {

     switch(dayType) {
        case 1:
            this.dayType = DayType.REGULAR;
            break;

        case 2:
            this.dayType = DayType.VACATION;
            break;

        case 3:
            this.dayType = DayType.SICK;
            break;

        default :
            this.dayType = DayType.REGULAR;
            break;
    }

这是这个枚举的设定者:

int

一切正常。但是,如果每个枚举值都有{{1}}值,则必须有更“漂亮”的方式来编写setter。不使用开关盒......

4 个答案:

答案 0 :(得分:2)

在这种特殊情况下,您不需要为每个元素显式指定int值,只需将其常量视为数组:

private DayType dayType = DayType.REGULAR;
public void setDayType(int dayType) {
   if (dayType <= DayType.values().length) this.dayType = DayType.values()[dayType - 1];
}

答案 1 :(得分:1)

通常的方法是在枚举

中添加静态方法
public enum DayType {
    REGULAR(1), VACATION(2), SICK(3);

    private final int value;
    private DayType(int value)
    {
        this.value = value;
    }

    public int getValue() {
        return value;
    }

    public static DayType byValue(int value) {
        Arrays.stream(DayType.values())
            .filter(dt -> dt.value == value)
            .findFirst()
            .orElse(DayType.REGULAR);
    }
}

用法

private DayType dayType

public void setDayType(int dayType) {
    this.dayType = DayType.byValue(dayType);
}

答案 2 :(得分:0)

您可以使用.ordinal()和值[index]的值来获取值。

不是在枚举中包含值字段,而是存储其DayType.REGULAR.ordinal()值。

所以加载:

this.dayTipe = DayType.values[dayType];

这里唯一的缺点是更新Enum,你需要在最后一个之后添加所有新的,所以它的索引永远不会冲突。

答案 3 :(得分:0)

您可以使用

避免使用switch语句
public void setDayType(int type) {

    for(DayType dayType : DayType.values()) {
        if(dayType.getValue() == type) {
            this.dayType = dayType;
        }
    }
}

如果您需要性能而不是内存,可以使用HashMap

private HashMap<Integer, DayType> dayTypes;

private void initDayTypes() {

    for(DayType type : DayType.values()) {
        dayTypes.put(type.value, type);
    }
}

用法将是下一个:

public void setDayType(int type) {

    this.dayType = dayTypes.get(type);
}