2013-04-02 14 views
122

Esiste una raccomandazione "ufficiale" su come denominare enumerazioni Java?Denominazione di enumerazioni in Java: Singolare o Plurale?

enum Protocol { HTTP, HTTPS, FTP } 

o

enum Protocols { HTTP, HTTPS, FTP } 

so nel mondo .Net la raccomandazione è di usare singolare ad eccezione di enumerazioni che rappresentano le bandiere bit. Solo curioso se c'è qualcosa di simile in Java.

Una questione collegata che sembra essere .Net specifica: Singular or plural for enumerations?

+0

Penso che questo sia un problema con una risposta relativa elevata. –

+3

[Puoi trovare la risposta qui] (http://stackoverflow.com/questions/3069743/coding-conventions-naming-enums). Le enumerazioni sono classi, vuol dire che dovresti dichiararle allo stesso modo. – bsiamionau

risposta

156

Enums in Java (e probabilmente enumerazioni in genere) dovrebbe essere singolare. Il pensiero è che non stai selezionando più protocolli, ma piuttosto un protocollo delle possibili scelte nell'elenco di valori.

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

+7

Questo è quello che mi aspettavo. Grazie per la conferma. – friederbluemle

+0

Piacere mio. Sembra che questo abbia aiutato molte persone. –

+2

Microsoft sembra avere più o meno la stessa opinione sulla programmazione .NET: http: // StackOverflow.com/a/1336012/279112 – Panzercrisis

16

Nello stesso modo che quando si sta definendo un nome di tabella in un database o una classe in Java si utilizza singolare per le enumerazioni è anche l'opzione migliore. Guarda 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 si vede chiaramente l'intenzione dell'attributo giorno. "giorno" è il giorno della settimana in cui si terrà questo appuntamento. In caso contrario, la firma del metodo sarebbe stata impostata su Giorno di chiusura (giorni) e sicuramente molte persone si staranno chiedendo se l'appuntamento potrebbe avvenire in più di un giorno.

Se si lavora in una società la ha 48 ore si sposta si potrebbe provare a definire qualcosa di simile:

public enum Days { 
MONDAY_TUESDAY, WEDNESDAY_THURSDAY, FRIDAY_SATURDAY 
} 

In questo modo è possibile impostare i giorni si sta andando a lavorare. Ma ancora sembrerà strano e v'è una scelta migliore ed è quella di utilizzare la forma singolare:

public enum Shift { 
MONDAY_TUESDAY, WEDNESDAY_THURSDAY, FRIDAY_SATURDAY 
} 

Ora è davvero sta mostrando il significato della enum. Di solito in qualsiasi dominio scoprirai che usare singolarmente per enum è l'opzione migliore dato che ogni costante nell'enum è solo un elemento.

Si parla anche di .NET. Un enum di "flag" in .NET significa semplicemente che quando si aspetta che enum come parametro ciò che si ottiene realmente è un elenco di elementi di quell'enumerazione (memorizzati come numeri interi).

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

public void setMultiHue(MultiHue hues); 

Si potrebbe fare lo stesso in Java, ma l'enum ancora sarà 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 semplice e più chiaro (anche se usa un più memoria) per fare questo con Java è solo quello di usa una lista.

+1

In realtà, un modo migliore per farlo sarebbe un EnumSet che incapsula un BitSet e si prende cura di tutto questo per te. :-) – corsiKa

Problemi correlati