Сценарий:
я хочу иметь перечисление, содержащее все игральные карты стандартной колоды. В этом примере игнорируйте джокеров.
Пишу
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
— это не то, что вам нужно. Вам действительно нужно называть тройку треф CLUBS_3? - person Paul   schedule 29.12.2011