启动枚举作为价值

cod*_*aif 3 java enums

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

例如:

public enum CardSuit {
   SPADE(0), HEART(1), DIAMOND(2), CLUB(3);
}
Run Code Online (Sandbox Code Playgroud)

我可以这样声明:

CardSuit s = CardSuit.SPADE;
Run Code Online (Sandbox Code Playgroud)

我也想这样声明:

CardSuit s = 1;
Run Code Online (Sandbox Code Playgroud)

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

Ell*_*sch 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);
}
Run Code Online (Sandbox Code Playgroud)

输出是

SPADE
Run Code Online (Sandbox Code Playgroud)

编辑

如果你想按指定的值搜索,你可以用这样的东西来做 -

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);
}
Run Code Online (Sandbox Code Playgroud)

输出是

CLUB
Run Code Online (Sandbox Code Playgroud)

  • @Karna [过早优化是万恶之源](http://c2.com/cgi/wiki?PrematureOptimization). - Knuth (3认同)