Denominazione degli enum in Java: singolare o plurale?


184

Esiste una raccomandazione "ufficiale" su come nominare gli enum Java?

enum Protocol { HTTP, HTTPS, FTP }

o

enum Protocols { HTTP, HTTPS, FTP }

Conosco nel mondo .Net la raccomandazione è di usare singolarmente ad eccezione degli enum che rappresentano bit flag. Solo curioso se c'è qualcosa di simile in Java.

Una domanda correlata che sembra essere. Net specifica: singolare o plurale per le enumerazioni?


3
Puoi trovare la risposta qui . Le enumerazioni sono classi, significa che dovresti dichiararle allo stesso modo.
bsiamionau,

Risposte:


220

Gli enum in Java (e probabilmente gli enum in generale) dovrebbero essere singolari. L'idea è che non si selezionano più protocolli, ma piuttosto un protocollo delle possibili scelte nell'elenco dei valori.

Nota l'assenza di plurali: http://docs.oracle.com/javase/tutorial/java/javaOO/enum.html


2
Microsoft sembra tenere più o meno la stessa opinione sulla programmazione .NET: stackoverflow.com/a/1336012/279112
Panzercrisis

Come mai TimeUnit usa i plurali? ad es .: DAYS, HOURS...
theyuv l'

5
I valori sono plurali, l'enum stesso non lo è :-)
Calvin,

21

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.


2
In realtà, un modo migliore per farlo sarebbe un EnumSet che incapsula un BitSet e si occupa di tutto ciò per te. :-)
corsiKa
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.