Enums?

oOJavaNeulingOo

Bekanntes Mitglied
Moin!

ich habe mir jetzt gestern und heute die Finger nach "Enum - Tutorials" wundgegoogelt, da ich denke dass sowas hilfreich sein könnte, aber ich finde einfach nichts! Die meisten Tutorials sind Videos, in denen man einen Code vorgeworfen bekommt aber nicht wirklich versteht was man damit tun soll. Dazu sind sie alle noch in Englisch, was dies für mich noch erschwert. (Ziemlich peinlich, ich weiß...)

Brauchen tue ich es um ein paar(Naja, etwas mehr) Strings zu "speichern", also einfach nur enumanem.STRINGNAME aufrufen zu müssen, aber da habe ich gleich ein Problem: die Strings solle nso definiert sein, dass sie auf eine methode in der main klasse zugreifen (noch nicht erstellt, aber circa so) so á la main.getDatei().getStrub´´ing("pfadzumstringinderdatei") - Nur, da ist das problem: Ich müsste dann in meinem Konstruktor jedes mal main übergeben, aber das würde dann den Sinn irgendwie .. ach egal, kurz gefasst: Ich habe nicht verstanden wie man Enums richtig benutzt :(

MfG
 

z-mon

Bekanntes Mitglied
Hallo Neuling,

ich bin mir nicht sicher ob ich korrekt verstanden habe was du genau benötigst, aber ein kleines Beispiel bekommst du trotzdem.

Java:
public enum TestEnum {

    VALUE1("Value1"),
    VALUE2("Value2"),
    VALUE3("Value3");

    private String myValue;

    private TestEnum(String myValue) {
        this.myValue = myValue;
    }

    public String getMyValue() {
        return myValue;
    }

    public static void main(String[] args) {

        for(TestEnum myEnum : values())
        {
            System.out.println(myEnum.getMyValue());
        }
    }
}

Vom Prinzip kapselt eine ENUM-Klasse viele kleine Klassen (jedes ENUM = eigene Klasse). Grundsätzlich kannst du jedem ENUM beliebig viele Parameter mitgeben, diese müssen dann im Konstruktor aber auch zugewiesen werden. Haben die ENUM´s unterschiedlich viele Werte, werden überlagerte Konstruktoren benötigt.
Über getter-Methoden kannst du dann anschließend die Werte auslesen.

Viel Erfolg
 
T

TryToHelp

Gast
Enums was für enumeration also Aufzählung steht bedeutet, du kannst es als eine Mögliche Liste sehen.

Ein Klassisches Besipiel

Java:
public enum Day{
    Montag, Dienstag, Mittwoch, Donnerstag, Freitag, Samstag, Sonntag
}

Nun kannst du aus anderen Stellen diese Aufzählung verwenden.

Java:
...
Day myDay=Day.Montag;
if (myDay==Day.Diensatag){

}
...
 
B

bygones

Gast
weiterhin ist das besondere an enums eben dass sie "vollwertige" Klassen sind, d.h. sie koennen eigenschaften und verhalten haben.

am Day Bsp von oben, sie koennten eine Methode "isWeekend()" haben, die von Samstag/Sonntag mit ja beantworten werden, vom rest mit nein (bzw in Gossis fall immer ja zurueckgeben.... <insider>)
 
P

pappawinni

Gast
Vielleicht kann ja bei der Gelegenheit mal jemand in einfachen Worten erklären, was Enumeration überhaupt ist, bzw. wofür man das braucht.
Also ich hatte das bisher (andere Programmiersprachen) als einen Weg verstanden, quasi global eigene Datentypen mit eingeschränktem Wertebereich zu deklarieren. Wenn ich zum Beispiel ein Kartenspiel programmiert hätte, hätte ich vielleicht einen Typ Kartenfarbe definiert, der dann eben nur "Kreuz", "Pik", "Herz" und "Karo" kennt. Diese Kartenfarben würden dann z.B. den Integerwerten 1 bis 4 entsprechen.
Im Programmcode würden dann eben überall, wo es um diese Kartenfarben geht nicht die Werte 1 bis 4 auftauchen, was ja wenig anschaulich wäre, sondern die entsprechenden Enumerationen. Wesentlich also eine Frage der Lesbarkeit des Codes.
Vergleichbar etwa mit Boolean. Da könnte man ja prinzipiell auch einfach statt mit "true" und "false" mit 0 und 1 arbeiten (Java macht das aber wieder mal anders).
Das ist halt auch nur, wie ich mir das erklärt habe.
Wie das eigentlich gedacht ist und insb. wie Enumeration in Java sinnvoll eingesetzt wird, bzw. was in Java unter Enumeration verstanden wird, da hab ich nicht den Hauch einer Idee.
 
T

TryToHelp

Gast
...
Also ich hatte das bisher (andere Programmiersprachen) als einen Weg verstanden, quasi global eigene Datentypen mit eingeschränktem Wertebereich zu deklarieren. Wenn ich zum Beispiel ein Kartenspiel programmiert hätte, hätte ich vielleicht einen Typ Kartenfarbe definiert, der dann eben nur "Kreuz", "Pik", "Herz" und "Karo" kennt. Diese Kartenfarben würden dann z.B. den Integerwerten 1 bis 4 entsprechen.
Im Programmcode würden dann eben überall, wo es um diese Kartenfarben geht nicht die Werte 1 bis 4 auftauchen, was ja wenig anschaulich wäre, sondern die entsprechenden Enumerationen. Wesentlich also eine Frage der Lesbarkeit des Codes.
Vergleichbar etwa mit Boolean. Da könnte man ja prinzipiell auch einfach statt mit "true" und "false" mit 0 und 1 arbeiten (Java macht das aber wieder mal anders).
Das ist halt auch nur, wie ich mir das erklärt habe.
...
Also ich finde das ist doch eine passende Erklärung, jedenfalls in den meisten fällen, aber wie bygones schon geschrieben hat, kann man noch mehr machen ;-)
 
P

pappawinni

Gast
.. kann man noch mehr machen

mir ist da vieles zu schwammig:
das besondere an enums eben dass sie "vollwertige" Klassen sind

Wozu brauch ich enum, wäre doch die Frage?
Wenn enum nichts ist, als eine vollwertige Klasse, wozu brauch ich dann die spezielle "vollwertige" Klasse enum, tät es eine andere vollwertige Klasse nicht ebenso ? Wenn nein, warum nicht ? Was ist der Kasus Knacktus ?
 
S

SlaterB

Gast
finale statische Konstanten einer Klasse sind nahe Alternativen,
warum man "Kreuz", "Pik", "Herz" und "Karo" haben sollte bedarf wohl keiner Erklärung

die Unterschiede zu den Konstanten sind nicht groß, lohnen aber doch den Aufwand eines eigenen Konstrukts in der Programmiersprache:
- begrenzte Anzahl Objekte der Klasse/ Enum, damit == Vergleich und switch-Statement gut machbar,
nach Serialierung wieder das richtige Enum statt einer Kopie, höchstens mehrfaches Laden in unterschiedlichen ClassLoadern könnte noch Ärger machen
- Standard-Methoden wie ordinal(), valueOf(), values(), name(),
sinnvoller Standard von toString() auch nicht zu verachten,
equals() und hashCode() ergeben sich automatisch aus den anderen Eigenschaften, bleiben unimplementiert korrekt (edit: sind schon überschrieben, aber nichts wesentlich neu..),
bei eigener Klasse mit Gefahr von Kopien besser doch korrekt zu implementieren
- wie so oft auch noch: bereits durch die Kennzeichnung deutlich besser erkennbar/ suchbar als beliebige Klassen,
denen man die statischen Konstanten/ den Einsatzzweck vielleicht nicht direkt ansieht
- kein 'public static final Klassenname .. = new Klassenname(..)' usw. an jedem Element der Auflistung ;)


jetzt wird es ja mal wieder eine Lehrbuch-Auflistung, eigentlich zu vermeiden ;)
noch mehr?
 
Zuletzt bearbeitet von einem Moderator:

oOJavaNeulingOo

Bekanntes Mitglied
Okay, vielen Dank, ich werde mich mal daran probieren :)

Noch was: Wie kann ich checken ob ein String zu einem Integer konvertier bar ist? Also irgendeine Methode die bei dem String T1e2s3t4 false zurückwirft, und bei 1452213634 true..
edit: Hat sich erledigt :)
 
Zuletzt bearbeitet:

Ähnliche Java Themen

Neue Themen


Oben