Odwołanie się do obiektu klasy przez enum

Odwołanie się do obiektu klasy przez enum
xorgx3
  • Rejestracja:prawie 14 lat
  • Ostatnio:około miesiąc
  • Postów:134
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:

Kopiuj
 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ć?

edytowany 1x, ostatnio: xorgx3
Patryk27
Moderator
  • Rejestracja:ponad 17 lat
  • Ostatnio:ponad rok
  • Lokalizacja:Wrocław
  • Postów:13042
1

Skorzystaj z mapy.


edytowany 1x, ostatnio: Patryk27
szweszwe
Nie wystarczy np. ArrayList?
xorgx3
Użyłem mapy i wszystko działa jak powinno. Dzięki.
Olamagato
  • Rejestracja:ponad 16 lat
  • Ostatnio:około miesiąc
  • Lokalizacja:Polska, Warszawa
  • Postów:1058
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ń).


Jeżeli ktoś komuś coś, ewentualnie nikt nikomu nic, to właściwie po co...?

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.