我想将枚举变量声明为值。我怎样才能做到这一点?
例如:
public enum CardSuit {
SPADE(0), HEART(1), DIAMOND(2), CLUB(3);
}
我可以这样声明:
CardSuit s = CardSuit.SPADE;
我也想这样声明:
CardSuit s = 1;
这样做的方法是什么?这甚至可能吗?
答案 0 :(得分:6)
我想你想要这样的东西,
public static enum CardSuit {
SPADE(0), HEART(1), DIAMOND(2), CLUB(3);
int value;
CardSuit(int v) {
this.value = v;
}
public String toString() {
return this.name();
}
}
public static void main(String[] args) {
CardSuit s = CardSuit.values()[0];
System.out.println(s);
}
输出
SPADE
修改强>
如果您想按指定的值进行搜索,可以使用以下内容进行搜索 -
public static enum CardSuit {
SPADE(0), HEART(1), DIAMOND(4), CLUB(2);
int value;
CardSuit(int v) {
this.value = v;
}
public String toString() {
return this.name();
}
public static CardSuit byValue(int value) {
for (CardSuit cs : CardSuit.values()) {
if (cs.value == value) {
return cs;
}
}
return null;
}
}
public static void main(String[] args) {
CardSuit s = CardSuit.byValue(2);
System.out.println(s);
}
输出
CLUB
答案 1 :(得分:4)
您可以提供工厂方法:
public enum CardSuit {
SPADE(0), HEART(1), DIAMOND(2), CLUB(3);
private final int value;
CardSuit(int value) { this.value = value; }
public static CardSuit of(int value) {
for (CardSuit cs : values()) {
if (cs.value == value) return cs;
}
throw new IllegalArgumentException("not a valid value: " + value);
}
}
public static void main(String[] args) {
CardSuit s = CardSuit.of(0);
System.out.println(s);
}
答案 2 :(得分:1)
您可以使用值和相应的枚举
保留地图public enum CardSuit {
SPADE(0), HEART(1), DIAMOND(2), CLUB(3);
private CardSuit(int i) {
value = i;
}
public int getValue() {
return value;
}
private int value;
private static Map<Integer, CardSuit> getByValue = new HashMap<Integer, CardSuit>();
public static CardSuit findByValue(int value) {
if (getByValue.isEmpty()) {
for (CardSuit cardSuit : CardSuit.values()) {
getByValue.put(cardSuit.getValue(), cardSuit);
}
}
return getByValue.get(value);
}
}
你可以做到
CardSuit s = CardSuit.findByValue(1);