Сценарий:
Я хочу иметь перечисление, содержащее все игровые карты в стандартной колоде. В этом примере игнорируйте джокеров.Enumerate enum-instance with loop
Запись
enum Cards {
SPADE_1(0, 1),
SPADE_2(0, 2),
etc.
чувствует себя неправильно.
Я хотел бы быть в состоянии сделать что-то вроде этого
enum Card {
for (int suit=0; suit<4; suit++) {
for (int face=1; face<13; face++) {
new Card(suit, face);
}
}
}
Я рассмотрел определение карты в качестве класса, содержащего костюм и лицо полей, где костюм и лицо сам являются перечислениями. Однако в других сценариях (например, джокеров с красными и черными костюмами) это позволит создать недействительные объекты карты (например, шутник из бриллиантов или красный 10).
Самостоятельный ответ:
По-видимому, у меня недостаточно ответов, чтобы опубликовать ответ на мой вопрос.
I'm not sure if it's considered good form to answer my own question, but @Paul just gave me a brainwave. Declare Card to have a private constructor, and use a static Card getCard(suit, face) method to validate combinations before returning them.
Возможно, 'enum' - это не то, что вы хотите. Вам действительно нужно обратиться к 3 клубам как CLUBS_3? – Paul
Да, абсолютно - частный конструктор, отдельные перечисления для SUIT и FACE. –