从不同的值转换为Enum值

时间:2016-09-11 07:28:07

标签: java enums

我的应用程序获取需要转换为相应Enum值的外部数据。这是我的第一个方法:

public enum Side {
    LEFT,
    RIGHT;

    public static Side fromByte(Byte b) throws Exception {
        switch(b)
        {
            case 'l':
                return LEFT;
            case 'r':
                return RIGHT;
            default:
                throw new Exception("not a valid byte");
        }
    }
}

这没关系,还是有更惯用的方法呢?

注意:忽略字符到字符比较和非常通用的异常抛出,我稍后会研究 - 特别是字符和字节类型转换。似乎比我原先预期的更重要。

2 个答案:

答案 0 :(得分:3)

我通常会这样做,

public enum Side
{
    LEFT('l'),
    RIGHT('r');

    private byte byteValue;

    private Side(byte byteValue)
    {
        this.byteValue = byteValue;
    }

    public byte getByteValue()
    {
        return byteValue;
    }

    public static Side findByByteValue(byte value)
    {
        for(Side side : values())
        {
            if(side.byteValue == value)
            {
                return side;
            }
        }
        return null;
    }
}

答案 1 :(得分:1)

方法看起来很好。但是如果有大量案例的可能性,那么考虑使用map(在你的情况下实现可以是HashMap),因为它将更具可读性和更少的代码。