Allo stesso modo che quando si definisce un nome di tabella in un database o in una classe in Java si usa singolarmente per enum è anche l'opzione migliore. Vedi come lo userai.
Scriviamo un esempio:
public enum Day {
SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY
}
class Appointment {
private Day day;
public void setDay(Day day) {
this.day = day;
}
}
In forma singolare vedi chiaramente l'intenzione dell'attributo day. "giorno" è il giorno della settimana che si terrà questo appuntamento. Altrimenti la firma del metodo sarebbe stata impostataDay (giorno di giorno) e sicuramente molte persone si chiederanno se l'appuntamento potrebbe avvenire in più di un giorno.
Se lavori in un'azienda con turni di 48 ore puoi provare a definire qualcosa del tipo:
public enum Days {
MONDAY_TUESDAY, WEDNESDAY_THURSDAY, FRIDAY_SATURDAY
}
In questo modo potresti impostare i giorni in cui lavorerai. Ma sembrerà strano e c'è un'opzione migliore ed è usare la forma singolare:
public enum Shift {
MONDAY_TUESDAY, WEDNESDAY_THURSDAY, FRIDAY_SATURDAY
}
Ora stai davvero mostrando il significato dell'enum. Di solito in qualsiasi dominio scoprirai che usare singolare per un enum è l'opzione migliore in quanto ogni costante nell'enum è solo un elemento.
Parli anche di .NET. Un enum "flags" in .NET significa solo che quando ci si aspetta quell'enum come parametro ciò che si ottiene realmente è un elenco di elementi di quell'enum (archiviato come intero).
// Define an Enum with FlagsAttribute.
[FlagsAttribute]
enum MultiHue : short
{
Black = 0,
Red = 1,
Green = 2,
Blue = 4
};
public void setMultiHue(MultiHue hues);
Potresti fare lo stesso in Java, ma l'enum sarà ancora singolare:
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;
}
}
Un modo più semplice e chiaro (sebbene utilizzi più memoria) per farlo con Java è solo usare un Elenco.