启动枚举作为价值

时间:2014-05-06 13:31:30

标签: java enums

我想将枚举变量声明为值。我怎样才能做到这一点?

例如:

public enum CardSuit {
   SPADE(0), HEART(1), DIAMOND(2), CLUB(3);
}

我可以这样声明:

CardSuit s = CardSuit.SPADE;

我也想这样声明:

CardSuit s = 1;

这样做的方法是什么?这甚至可能吗?

3 个答案:

答案 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);