W ten sam sposób, gdy definiujesz nazwę tabeli w bazie danych lub klasie w Javie, używasz liczby pojedynczej dla wyliczeń, jest to również najlepsza opcja. Zobacz, jak zamierzasz z niego korzystać.
Napiszmy przykład:
public enum Day {
SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY
}
class Appointment {
private Day day;
public void setDay(Day day) {
this.day = day;
}
}
W liczbie pojedynczej wyraźnie widać zamiar atrybutu dnia. „dzień” to dzień tygodnia, w którym odbędzie się spotkanie. W przeciwnym razie podpis metody zostałby ustawiony na Dzień (Dzień) i na pewno wiele osób będzie się zastanawiać, czy spotkanie może nastąpić za więcej niż jeden dzień.
Jeśli pracujesz w firmie, masz 48-godzinne zmiany, możesz spróbować zdefiniować coś takiego:
public enum Days {
MONDAY_TUESDAY, WEDNESDAY_THURSDAY, FRIDAY_SATURDAY
}
W ten sposób możesz ustawić dni, w które będziesz pracować. Ale nadal będzie wyglądać dziwnie i istnieje lepsza opcja i jest użycie liczby pojedynczej:
public enum Shift {
MONDAY_TUESDAY, WEDNESDAY_THURSDAY, FRIDAY_SATURDAY
}
Teraz naprawdę pokazujesz znaczenie wyliczenia. Zwykle w każdej domenie przekonasz się, że użycie liczby pojedynczej w wyliczeniu jest najlepszą opcją, ponieważ każda stała w wyliczeniu jest tylko jednym elementem.
Wspominasz także .NET. Wyliczenie „flagi” w .NET oznacza po prostu, że gdy oczekujesz tego wyliczenia jako parametru, tak naprawdę otrzymujesz listę elementów tego wyliczenia (przechowywaną jako liczba całkowita).
// Define an Enum with FlagsAttribute.
[FlagsAttribute]
enum MultiHue : short
{
Black = 0,
Red = 1,
Green = 2,
Blue = 4
};
public void setMultiHue(MultiHue hues);
Możesz zrobić to samo w Javie, ale wyliczenie nadal będzie liczbą pojedynczą:
public enum Hue {
BLACK, RED, GREEN, BLUE;
private final Integer hue;
Hue() {
this.hue = 1 << this.ordinal();
}
public Integer toFlag() {
return this.hue;
}
}
public class MultiHue {
private Integer hues = 0;
public void addHue(Hue hue) {
this.hues |= hue.toFlag();
}
public boolean hasHue(Hue hue) {
return (this.hues & hue.toFlag()) != 0;
}
}
Łatwiejszym i bardziej zrozumiałym (choć zużywa więcej pamięci) zrobienie tego w Javie jest po prostu użycie Listy.