Nombramiento de enums en Java: Singular o Plural?

¿Hay una recomendación “oficial” de cómo nombrar las enumeraciones de Java?

enum Protocol { HTTP, HTTPS, FTP } 

o

 enum Protocols { HTTP, HTTPS, FTP } 

Sé que en el mundo .Net, la recomendación es usar singular, excepto los enumerados que representan banderas de bits. Solo por curiosidad si hay algo parecido en Java.

Una pregunta relacionada que parece ser específica de .Net: ¿ Singular o plural para las enumeraciones?

Las enumeraciones en Java (y probablemente las enumeraciones en general) deben ser singulares. La idea es que no está seleccionando múltiples Protocolos, sino un protocolo de las posibles opciones en la lista de valores.

Tenga en cuenta la ausencia de plurales: http://docs.oracle.com/javase/tutorial/java/javaOO/enum.html

De la misma manera que cuando estás definiendo un nombre de tabla en una base de datos o una clase en Java, usas singular para enums también es la mejor opción. Solo ve como lo vas a usar.

Vamos a escribir 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 se ve claramente la intención del atributo 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 habría establecido el día (día de los días) y, con seguridad, muchas personas se preguntarán si la cita podría ocurrir en más de un día.

Si trabajas en una empresa que tiene turnos de 48 horas, podrías tratar de definir algo como:

 public enum Days { MONDAY_TUESDAY, WEDNESDAY_THURSDAY, FRIDAY_SATURDAY } 

De esa manera usted podría fijar 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. Generalmente, 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 de “flags” en .NET significa que cuando espera esa enumeración como parámetro, lo que realmente obtiene es una lista de elementos de esa enumeración (almacenada 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ía 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 forma más fácil y clara (aunque usa más memoria) para hacer esto con Java es solo usar una Lista.