Odwołanie się do obiektu klasy przez enum

0

Ciężko w temacie wyrazić czego dotyczy mój problem.

Chodzi o to, że chcę rysować figury geometryczne w pętli, przy czym przy każdym obiegu pętli kolor figury ma być inny. Postanowiłem więc wrzucić nazwy kolorów z klasy Color do enuma i z niego się odwoływać np:

 private static enum Colors{
    	BLACK, BLUE, CYAN, DARK_GRAY, GRAY, MAGENTA, ORANGE, PINK,
    	RED, WHITE, YELLOW
    }
 Graphics g2d;
for (int i = 0; i < 11; i++) {
            	g2d.setColor(Color.(Colors.YELLOW));   // tu potrzebuję wstawić coś w stylu Colors[i], tylko że z enuma
}

I teraz pytanie: jak odwołać się do pola klasy Color przy użyciu pól typu wyliczeniowego?
Ewentualnie jak to inaczej rozwiązać?

1

Skorzystaj z mapy.

0

Enuma nazywaj zawsze tak jak nazywa się jego pojedynczy element. Enum nie reprezentuje zbioru wartości, ale samą pojedynczą wartość. Listą wartości dla każdego wyliczenia jest metoda values(), która jest syntetyzowana przez kompilator i zwraca obiekt Iterable po tym wyliczeniu, więc można go użyć jako wartości w pętli foreach, aby iterować po nich (lub użyć Arrays.asList(), żeby mieć je w postaci listy wszystkich wartości). Wtedy
for(Color color: Color.values())
{
//...
g2d.setColor(color);
//...
}

Jeżeli mapa, w której kluczami mają być wyliczenia, to efektywniejsza od HashMapy jest EnumMap ponieważ jest wewnętrznie zoptymalizowana pod klucze będące wyliczeniami. Analogicznie zamiast HashSet należy użyć EnumSet, który wewnętrznie operuje na bitach kolejnych elementów long zamiast na tablicy haszującej. Dzięki temu rolę kodu hash pełni sama wartość wyliczenia, która jest funkcją idealną (brak powtórzeń).

1 użytkowników online, w tym zalogowanych: 0, gości: 1