我有一个Enum如下:
enum Mobile {
Samsung(400), Nokia(250),Motorola(325);
int price;
Mobile(int p) {
price = p;
}
int showPrice() {
return price;
}
}
如何为Enum对象提供值 例如,如果输入为400,则输出应为Samsung Enum对象。
请建议。
答案 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。
附加说明:这要求所有值都是不同的!