public enum month {
JANUAR,
FEBRUAR,
MAERZ,
APRIL,
MAI,
JUNI,
JULI,
AUGUST,
SEPTEMBER,
OKTOBER,
NOVEMBER,
DEZEMBER;
}
Ich würde eher Aufzählungstyp sagen, bzw. Gruppierungsmöglichkeit von zusammengehörigen Werten.
Das wohl beliebteste Enum:
Java:public enum month { JANUAR, FEBRUAR, MAERZ, APRIL, MAI, JUNI, JULI, AUGUST, SEPTEMBER, OKTOBER, NOVEMBER, DEZEMBER; }
Mit Enums kannst du aber auch viel mehr machen, wie Größenvergleiche oder wäre auch die Ermittlung der Position im Enum möglich.
Was vielleicht noch wichtig ist, Enums sind nicht irgendwelche Konstanten. Im Idealfall hängen sie logisch/inhaltlich zusammen
[Edit] Maki war schneller, mein Beitrag bezieht sich natürlich nicht auf seinen.
enums können problemlos geswitcht werden.Was ich bis jetzt allerdings nicht verstehe ist, warum in switch keine Enums möglich sind. Was echt praktisch wäre und in anderen Sprachen wie z.B. C# (ja ich weiß, dort sind Enums gänzlich anders gelöst ...) möglich sind.
Was ist lesbarer? [c]Foo foo = Bar.getFoo(FooTypes.SOME_FOO);[/c] oder [c]Foo foo = Bar.getFoo(fooTypes.get(2));[/c]? Und was passiert, wenn die Liste sich unbemerkt ändern sollte?Gut, aber Sachen aufzählen, kann ich auch mit Listen. Wo ist der Unterschied?
Klar kannst du Enums in nem switch verwenden. Wie kommst du drauf dass das nicht gehen sollte?Was ich bis jetzt allerdings nicht verstehe ist, warum in switch keine Enums möglich sind. Was echt praktisch wäre und in anderen Sprachen wie z.B. C# (ja ich weiß, dort sind Enums gänzlich anders gelöst ...) möglich sind.
Was ich bis jetzt allerdings nicht verstehe ist, warum in switch keine Enums möglich sind.
14.11 The switch Statement
The switch statement transfers control to one of several statements depending on the value of an expression.
SwitchStatement:
switch ( Expression ) SwitchBlock
SwitchBlock:
{ SwitchBlockStatementGroupsopt SwitchLabelsopt }
SwitchBlockStatementGroups:
SwitchBlockStatementGroup
SwitchBlockStatementGroups SwitchBlockStatementGroup
SwitchBlockStatementGroup:
SwitchLabels BlockStatements
SwitchLabels:
SwitchLabel
SwitchLabels SwitchLabel
SwitchLabel:
case ConstantExpression :
case EnumConstantName : <---------------------------------------------------------
default :
EnumConstantName:
Identifier
Sollte man nicht machen, wenn weitere Instanzen zum Enum hinzugefügt werden, kann sich der ordinal Wert einer Instanz schon mal ändern, insbesondere wenn man die enuen Instanzen nicht am Ende hinzufügt, sondern die Reihenfolge der alten ändert.Kann ich enums auch als index in Arrays verwenden? (IMO verstecken sich dahinter ja int)
Java:int[] arr = new int[MyEnum.values().length]; arr[enumWert.ordinal];
Sieht etwas kompliziert aus ;-)
Sollte man nicht machen, wenn weitere Instanzen zum Enum hinzugefügt werden, kann sich der ordinal Wert einer Instanz schon mal ändern, insbesondere wenn man die enuen Instanzen nicht am Ende hinzufügt, sondern die Reihenfolge der alten ändert.
Ich komme eigentlich aus der C#-Welt und bin erst nach letzten Dezember umgestiegen.Klar kannst du Enums in nem switch verwenden. Wie kommst du drauf dass das nicht gehen sollte?
switch(myEnumVar) {
case MyEnum.VALUE_1:
break;
}
switch(myEnumVar) {
case VALUE_1:
break;
}
Habe ich das richtig verstanden, dass Enums nur dazu da sind, damit ich mich bei Konstanten in mehrparametrigen Funktionen nicht vertue oder gibt es noch mehr Vorteile?