web-dev-qa-db-fra.com

Nommage des enums en Java: singulier ou pluriel?

Existe-t-il une recommandation "officielle" sur la façon de nommer Java enum?

enum Protocol { HTTP, HTTPS, FTP }

ou

enum Protocols { HTTP, HTTPS, FTP }

Je sais que dans le monde .Net, la recommandation est d'utiliser singulier, à l'exception des énumérations représentant des drapeaux bits. Juste curieux de savoir s'il y a quelque chose de similaire en Java.

Une question connexe qui semble être spécifique à Net: Singulier ou pluriel pour les énumérations?

164
friederbluemle

Les énumérations dans Java (et probablement les énumérations en général) doivent être singulières. L'idée est que vous ne sélectionnez pas plusieurs protocoles, mais plutôt un protocole des choix possibles dans la liste de valeurs.

Notez l'absence de pluriels: http://docs.Oracle.com/javase/tutorial/Java/javaOO/enum.html

200
Avram Score

De la même manière que lorsque vous définissez un nom de table dans une base de données ou une classe dans Java vous utilisez singulier pour enums, c’est également la meilleure option. Voyez comment vous allez l’utiliser.

Écrivons un exemple:

public enum Day {
SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY
}

class Appointment {
private Day day;

public void setDay(Day day) {
    this.day = day;
}
}

Au singulier, vous voyez clairement l'intention de l'attribut day. "jour" c'est le jour de la semaine où ce rendez-vous aura lieu. Sinon, la signature de la méthode aurait été définie le jour (jour) et beaucoup de gens se demanderont si le rendez-vous pourrait avoir lieu dans plus d'une journée.

Si vous travaillez dans une entreprise disposant de quarts de travail de 48 heures, vous pouvez essayer de définir quelque chose comme:

public enum Days {
MONDAY_TUESDAY, WEDNESDAY_THURSDAY, FRIDAY_SATURDAY
}

De cette façon, vous pouvez définir les jours où vous allez travailler. Mais cela aura toujours l’air bizarre et il existe une meilleure option et consiste à utiliser la forme singulière:

public enum Shift {
MONDAY_TUESDAY, WEDNESDAY_THURSDAY, FRIDAY_SATURDAY
}

Maintenant, vous montrez vraiment le sens de l'énum. En général, dans n'importe quel domaine, vous constaterez que l'utilisation de singulier pour une énumération est la meilleure option, car chaque constante de cette énumération ne représente qu'un élément.

Vous mentionnez également .NET. Une énumération "flags" dans .NET signifie simplement que lorsque vous attendez cette énumération en tant que paramètre, vous obtenez une liste d'éléments de cette énumération (stockée sous forme d'entier).

// Define an Enum with FlagsAttribute.
[FlagsAttribute] 
enum MultiHue : short
{
    Black = 0,
    Red = 1,
    Green = 2,
    Blue = 4
};

public void setMultiHue(MultiHue hues);

Vous pouvez faire la même chose en Java, mais l'énumération sera toujours singulière:

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 moyen plus simple et plus clair (bien qu’il utilise plus de mémoire) de faire cela avec Java est juste d’utiliser une liste.

19
Josep Panadero