Things inside enum are identifiers, the names of the static finite (persistent) objects that will be created. Thus, you cannot use int to name an object.
enum allows you to place fields for each record:
public static enum Suit {HEART,DIAMOND,SPADE,CLUB} public static enum Cards { ACE_OF_HEART(Suit.HEART,14), QUEEN_OF_SPADE(Suit.SPADE,13) ; private final Suit mSuit; private final int mRank; private Cards(Suit suit, int rank) { assert rank >= 2 && rank <= 14; mSuit = suit; mRank = rank; } public Suit getSuit() { return mSuit; } public int getRank() { return mRank; } }
You really do not want to encode all 52 cards in this way. You can model it differently:
Suite:
public static enum Suit { SPADE, HEART, DIAMOND, CLUB};
A class with some popular ranks as named constants:
public class Card{ public static final int ACE = 14; public static final int QUEEN = 13; public static final int KING = 12; public static final int JACK = 11; private final int mRank; private final Suite mSuit; public Card(Suite s, int r){ this.mSuit = s; if(r < 2 || r > 14){ throw new IllegalArgumentException("No such card with rank: "+r); } this.mRank = r; } public Suit getSuit() { return mSuit; } public int getRank() { return mRank; } }
SD
source share