2013-04-02 12 views
122

Gibt es eine "offizielle" Empfehlung, Java-Enums zu benennen?Benennung von Enums in Java: Singular oder Plural?

enum Protocol { HTTP, HTTPS, FTP } 

oder

enum Protocols { HTTP, HTTPS, FTP } 

Ich weiß, in der .NET-Welt die Empfehlung mit Ausnahme von Aufzählungen Singular zu verwenden ist, die Bit-Flags repräsentieren. Nur neugierig, ob es in Java etwas Ähnliches gibt.

Eine weitere Frage, die bestimmte .Net zu sein scheint: Singular or plural for enumerations?

+0

Ich denke, das ist ein Problem mit einer hohen relativen Antwort. –

+3

[Hier finden Sie die Antwort] (http://stackoverflow.com/questions/3069743/coding-conventions-naming-enums). Enums sind Klassen, das heißt, Sie sollten sie auf die gleiche Weise deklarieren. – bsiamionau

Antwort

156

Aufzählungen in Java (und wahrscheinlich auch Aufzählungen im Allgemeinen) singulär sein sollten. Der Gedanke ist, dass Sie nicht mehrere Protokolle auswählen, sondern ein Protokoll der möglichen Auswahlmöglichkeiten in der Werteliste.

Beachten Sie die Abwesenheit von plural: http://docs.oracle.com/javase/tutorial/java/javaOO/enum.html

+7

Das habe ich erwartet. Danke für die Bestätigung. – friederbluemle

+0

Mein Vergnügen. Scheint, als ob dies vielen Menschen geholfen hat. –

+2

Microsoft scheint ungefähr die gleiche Meinung über .NET-Programmierung zu haben: http: // stackoverflow.com/a/1336012/279112 – Panzercrisis

16

In der gleichen Weise, dass, wenn Sie einen Tabellennamen in einer Datenbank oder eine Klasse in Java definieren, verwenden Sie Singular für Aufzählungen es ist auch die beste Option. Sehen Sie einfach, wie Sie es verwenden werden.

Nehmen wir ein Beispiel schreiben:

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

class Appointment { 
private Day day; 

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

In Singularform sieht man deutlich die Absicht des Tages Attribut. "Tag" ist der Tag der Woche, an dem dieser Termin stattfindet. Sonst wäre die Signatur der Methode gesetzt (Tag der Tage) und sicherlich werden sich viele Leute fragen, ob der Termin an mehr als einem Tag stattfinden könnte.

Wenn Sie in einem Unternehmen arbeiten, das hat 48 Stunden verschieben Sie könnten versuchen, so etwas wie zu definieren:

public enum Days { 
MONDAY_TUESDAY, WEDNESDAY_THURSDAY, FRIDAY_SATURDAY 
} 

Auf diese Weise kann die Tage einstellen könnten Sie arbeiten werden. Aber dennoch wird es aussehen komisch, und es ist eine bessere Option und ist die Singularform zu verwenden:

public enum Shift { 
MONDAY_TUESDAY, WEDNESDAY_THURSDAY, FRIDAY_SATURDAY 
} 

nun wirklich Sie die Bedeutung des Enum zeigen. Normalerweise werden Sie in jeder Domäne feststellen, dass die Verwendung von Singular für eine Enumeration die beste Option ist, da jede Konstante in der Enumeration nur ein Element ist.

Sie erwähnen auch .NET. Eine "Flags" -Enumerierung in .NET bedeutet nur, dass wenn Sie diese Enumeration als einen Parameter erwarten, was Sie wirklich bekommen, eine Liste von Elementen dieser Enumeration (gespeichert als Integer) ist.

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

public void setMultiHue(MultiHue hues); 

Sie könnten das gleiche in Java tun, aber die ENUM noch singulär sein:

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; 
} 
} 

Ein einfache und übersichtliche (obwohl es einen Speicher verwendet) dies mit Java zu tun, ist nur zu Benutze eine Liste.

+1

Eigentlich wäre ein besserer Weg, dies zu tun, ein EnumSet, das ein BitSet kapselt und das alles für Sie erledigt. :-) – corsiKa

Verwandte Themen