Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
public enum Auto {
BMW("Bayrischer Mist Wagen", "Deutsch"),
Toyota("Arigato", "Japanisch"),
Ford("Amischlitten", "Amerikanisch");
private final String beschreibung;
private final String herkunft;
Auto(String info, String land){
beschreibung=info;
herkunft=land;
}
public String getBeschreibung(){
return beschreibung;
}
public String getHerkunft(){
return herkunft;
}
}
Java:
public class Panjutorials {
public static void main(String[] args) {
for(Auto marke: Auto.values()){
System.out.printf("%s t %s t %s n", marke, marke.getBeschreibung(), marke.getHerkunft());
}
}
}
Ich habe es mal versucht ohne Enum nachzubilden. Ist es das gleiche?
Java:
public class AutoVerzeichnis {
private final String[][] auto = {
{ "BMW", "Bayrischer Mist Wagen", "Deutsch" }
{ "Toyota", "Arigato", "Japanisch" }
{ "Ford", "Amischlitten", "Amerikanisch" }
};
private final int MARKE = 0;
private final int BESCHREIBUNG = 1;
private final int HERKUNFT = 2;
public static void main(String[] args) {
for(int i=0; i<auto.length; i++) {
System.out.printf("%s%t%s%t%s%n",
auto[i][MARKE],
auto[i][BESCHREIBUNG],
auto[i][HERKUNFT]);
}
}
}
public class Auto {
public Auto BMW = new Auto("Bayrischer Mist Wagen", "Deutsch"),
public Auto Toyota = new Auto("Arigato", "Japanisch"),
public Auto Ford = new Auto("Amischlitten", "Amerikanisch");
private final String beschreibung;
private final String herkunft;
private Auto(String info, String land){
beschreibung=info;
herkunft=land;
}
public String getBeschreibung(){
return beschreibung;
}
public String getHerkunft(){
return herkunft;
}
}
Zusätzlich zu mrBrown's Annäherung in Post #2:
- Klasse ist final
- Klasse erbt von Enum
- Klasse erhält vom Compiler spezielle Methoden wie values
- Namen der Konstante werden berücksichtigt, auch die Stelle an dem die Konstante steht (ordinal),...
Und zusätzlich sollten die Variablen 'BMW', 'Toyota' und 'Ford' im mrBrowns Beispiel 'static final' sein, also:
Java:
public static final Auto BMW = new Auto("Bayrischer Mist Wagen", "Deutsch");
public static final Auto Toyota = new Auto("Arigato", "Japanisch");
public static final Auto Ford = new Auto("Amischlitten", "Amerikanisch");
Ich glaube ohne 'static' würde es sogar zu einer Endlosrekursion kommen.
Eine enum ist eine Variable die nur bestimmte vorgebenen werte enthalten kann:
z.B enum Ampelfarbe { ROT, GELB, GRUEN }
Anderes Beispiel:
Code:
public class Copy
{
// Die Klasse soll 3 möglichkeiten haben ein nicht existierendes Verzeichnis
// zu behandeln: a) es nicht anlegen b) die letzte Ebene anlegen c) alle fehlenden
// Unterverzeichnisse anlegen
public enum EnCreateDestDir { DONT_CREATE, CREATE_DIR, CREATE_ALL_DIRS }
...
// Enumvariable anlegen
EnCreateDestDir how;
oder
Copy.EnCreateDestDir how; //mit dem klassenname vornedran
// Durchlaufen einer enum und deren Werte ausgeben ?
for (Copy.EnCreateDestDir method : Copy.EnCreateDestDir.values())
{
System.out.println(method);
System.out.println(String.format("%d = %s",method.ordinal(),method));
// ordinal liefert die Number / Index
}
// Ausgabe ist dann:
// 0 = DONT_CREATE
// 1 = CREATE_DIR
// 2 = CREATE_ALL_DIRS
immer mit der Ruhe! es stimmt schon, ich wollte verstehen was Enum ist und wie es sinnvoll eingesetzt wird und bin natürlich für jedes Beispiel dankbar @Senftube wenngleich das Beispiel mir auch nicht die Frage beantworten konnte. Vielleicht bin ich einfach noch nicht "reif" für Enum
Vielleicht macht dich das auch etwas reifer: http://openbook.rheinwerk-verlag.de/javainsel9/javainsel_09_004.htm
Und warum willst du enum denn unbedingt mit was vergleichen ? Enum ist ein Aufzählungstyp mit benannten Aufzählungselementen und in Java kommen noch einige Spezialitäten dazu, siehe Link.
Was das Enum vor allem aus macht, ist die Unterstützung durch IDE und Compiler. Diese erkennen, dass man ein Enum verwendet und erlauben dann einen Syntax, der bei anderen Klassen nicht gültig ist.
Beispiel: Ein Enum wird in switch-case unterstützt. Bei den Cases schreibt man den Klassennamen nicht dazu, außerdem werden die einzelnen Fälle mit equals() verglichen (vorher also auf null prüfen), im Quellcode steht aber nichts davon. Beim Compilieren wird der Code um die fehlenden Teile ergänzt.
Außerdem verhindern IDE und Compiler z.B. auch, dass man in switch/case Enums mischen kann. Der bytecode würde das erlauben, aber IDE/Compiler halten dich davon ab.
Davon abgesehen ist die Autoklasse (mit nachfolgenden ergänzenden Kommentaren durch Flown) absolut richtig erklärt. Bei einem Enum handelt es sich datentechnisch um statische Instanzen einer statischen Klasse samt speziellen Hilfsmethoden.