Scenariusz:
Chcę mieć wyliczenie zawierające wszystkie karty do gry w standardowej talii. W tym przykładzie zignoruj jokery.Wylicz instancję wyliczeniową pętlą
Pisanie
enum Cards {
SPADE_1(0, 1),
SPADE_2(0, 2),
etc.
czuje się źle.
Chciałbym móc zrobić coś takiego
enum Card {
for (int suit=0; suit<4; suit++) {
for (int face=1; face<13; face++) {
new Card(suit, face);
}
}
}
Mam badanym definiowania karty jako klasa zawierającym garnitur i twarz pól, gdzie garnitur i twarz są same teksty stałe. Jednak w innych scenariuszach (takich jak jokery o czerwonych i czarnych kolorach) pozwoliłoby to na tworzenie nieważnych obiektów kart (np. Jokera z brylantami lub czerwonego 10).
Self-odpowiedź:
Najwyraźniej nie mam wystarczającej liczby przedstawicieli, aby wysłać odpowiedź na moje własne pytanie.
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.
Być może 'enum' nie jest tym, czego chcesz. Czy naprawdę potrzebujesz odnosić się do 3 trefl jako CLUBS_3? – Paul
Tak, absolutnie - prywatny konstruktor, oddzielne wyliczenia dla opcji SUIT i FACE. –