De la misma manera que cuando define un nombre de tabla en una base de datos o una clase en Java, utiliza singular para enumeraciones, también es la mejor opción. Solo mira cómo lo vas a usar.
Escribamos un ejemplo:
public enum Day {
SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY
}
class Appointment {
private Day day;
public void setDay(Day day) {
this.day = day;
}
}
En forma singular, ve claramente la intención del atributo del día. "día" es el día de la semana en que se realizará esta cita. De lo contrario, la firma del método se hubiera establecido Día (Día) y seguramente muchas personas se preguntarán si la cita podría ocurrir en más de un día.
Si trabaja en una empresa que tiene turnos de 48 horas, podría intentar definir algo como:
public enum Days {
MONDAY_TUESDAY, WEDNESDAY_THURSDAY, FRIDAY_SATURDAY
}
De esa manera, podría establecer los días que va a trabajar. Pero aún así se verá raro y hay una mejor opción y es usar la forma singular:
public enum Shift {
MONDAY_TUESDAY, WEDNESDAY_THURSDAY, FRIDAY_SATURDAY
}
Ahora realmente estás mostrando el significado de la enumeración. Por lo general, en cualquier dominio, encontrará que usar singular para una enumeración es la mejor opción, ya que cada constante en la enumeración es solo un elemento.
También mencionas .NET. Una enumeración "flags" en .NET solo significa que cuando espera esa enumeración como parámetro, lo que realmente obtiene es una lista de elementos de esa enumeración (almacenados como un entero).
// Define an Enum with FlagsAttribute.
[FlagsAttribute]
enum MultiHue : short
{
Black = 0,
Red = 1,
Green = 2,
Blue = 4
};
public void setMultiHue(MultiHue hues);
Podrías hacer lo mismo en Java, pero la enumeración seguirá siendo singular:
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;
}
}
Una manera más fácil y clara (aunque usa más memoria) de hacer esto con Java es simplemente usar una Lista.