如何从提供的值返回Enum对象

时间:2014-08-21 16:32:32

标签: java enums

我有一个Enum如下:

enum Mobile {
   Samsung(400), Nokia(250),Motorola(325);

   int price;
   Mobile(int p) {
      price = p;
   }
   int showPrice() {
      return price;
   } 
}

如何为Enum对象提供值 例如,如果输入为400,则输出应为Samsung Enum对象。

请建议。

2 个答案:

答案 0 :(得分:5)

Mobile enum本身

中创建一个静态方法
public static Mobile getByPrice(int price) {
    for (Mobile mobile : Mobile.values()) { // iterate all the values of enum
        if (mobile.price==price) { // compare the price
            return mobile; // return it
        }
    }
    return null; 
    // either return null or throw IllegalArgumentException
    //throw new IllegalArgumentException("No mobile found in this price:"+price);
}

答案 1 :(得分:0)

从值到枚举实例提供映射。这将是一个静态变量,可以(必须)由构造函数填充:

(根据Pshemo的评论编辑的代码)

enum Mobile {
    Samsung(400), Nokia(250),Motorola(325);

    private static final Map<Integer, Mobile> MOBILES = new HashMap<>();
    static {
        for (Mobile m : values())
            MOBILES.put(m.price, m);
    }

    int price;

    Mobile(int p) {
        price = p;
    }

    int showPrice() {
        return price;
    }

    public static Mobile byValue(int value) {
        return MOBILES.get(value);
    }
}

请注意,涉及一些自动装箱和启动装置。如果该值不存在,请考虑抛出IllegalArgumentException。

附加说明:这要求所有值都是不同的!