Enum ist das gleiche wie?

Reggie()

Bekanntes Mitglied
Dieses Beispiel habe ich im Netz gefunden:
Java:
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]);
        }
   }
}
 
Nein.

Am ehesten Vergleichbar mit:
Java:
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.

lg Kevin
 
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 🙂
 
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.
 

Neue Themen


Zurück
Oben