Wie kann ich auf die Variablenattribute eines Enums zugreifen (Java)?

3 Antworten

Von Experte ralphdieter bestätigt

Es verhält sich wie bei ganz normalen Objekten, nur dass bei einem Enum halt die konstanten Elemente (MONTAG, DIENSTAG, etc.) die einzig verfügbaren Instanzen sind.

Beispiel:

Wochentag irgendeinWochentag = Wochentag.SONNTAG;
System.out.println(irgendeinWochentag.wochenende);

KathaHohenfels 
Fragesteller
 10.04.2022, 13:10

Dankeschön, ich habe es jetzt auch hinbekommen! Mein Fehler war der folgende gewesen:

public int wochenendTageAnzahl(){
    int anzahl = 0;
    for(Wochentag i : aktuell){
        if (Wochentag.wochenende == true){
            anzahl +=1;
        }
    }
    return anzahl;
}

Ich habe Wochentag.wochenende geschrieben statt i.wochenende.

War also nur ein dummer Fehler, aber dafür weiß ich jetzt, dass man in Enums den Konstanten tatsächlich Attribute verleihen kann - wie nice!

LG Kath

0
regex9  10.04.2022, 13:37
@KathaHohenfels

An sich kannst du Enums in Java wie Klasse behandeln, denn im Grunde sind sie nichts anderes. Die eleganteste Lösung wäre es daher, auch das Prinzip der Kapselung zu berücksichtigen.

public enum Wochentag {
  MONTAG(false), /* ... */ SONNTAG(true);

  private final boolean istWochenende;

  private Wochentag(boolean istWochenende) {
    this.istWochenende = istWochenende;
  }

  public boolean istWochenende() {
    return istWochenende;
  }
}

Anwendung:

public int gibAnzahlWochenendtage() {
  int anzahl = 0;

  for (Wochentag tag : aktuell) {
    if (tag.istWochenende()) {
      ++anzahl;
    }
  }

  return anzahl;
}
1

Ich glaube da reicht ein simples

if(generierterWochentag){
    //ist SA oder SO  
}

bin mir aber nicht 100%ig sicher, also einfach mal probieren ;)

Woher ich das weiß:Studium / Ausbildung – Informatikstudent

KathaHohenfels 
Fragesteller
 08.04.2022, 20:18

genau so sollen wir es aber nicht machen, wir sollen nicht überprüfen, ob es SO oder SA ist, sondern über eben diese Attribute...

0
KathaHohenfels 
Fragesteller
 10.04.2022, 13:11
@whgoffline

stimmt, aktuell prüfst du auf gar nichts, sondern schreibst nur einen Kommentar, der mir auch nicht weiterhilft, da ich eben nicht wusste, wie man darauf zugreift.

0
regex9  08.04.2022, 21:27

Die Variable generierterWochentag würde doch nur auf eine Instanz des Enums zeigen, aber den Wert des Feldes wochenende überhaupt nicht erfragen.

1

Also eigentlich (glaube ich) kann ein Enum gar nichts, außer Werte beinhalten.

Also die Variable, die Methode und die Attribute funktionieren nicht.

Theoretisch sollte deine IDE schon alles rot gemacht haben 🤔

Das muss also alles außerhalb des Enums geschehen.

Woher ich das weiß:eigene Erfahrung

regex9  08.04.2022, 21:22

Der Code von ihr ist absolut valid.

2
Kalkablagerung  08.04.2022, 21:27
@regex9

Wieso wurde mir so etwas nie mitgeteilt O.O Nirgends im Internet (außer in der API obviously) habe ich etwas dergleichen gefunden. Naja, man lernt immer dazu 😅 Schade nur, dass ich meine Antwort nicht löschen kann...

0
regex9  08.04.2022, 21:30
@Kalkablagerung

Das gilt nur für Java. Enums waren nicht von Anfang an Bestandteil der Sprache, sie wurden erst später hinzugefügt. Implizit sind es finale Klassen.

1
Kalkablagerung  08.04.2022, 21:31
@regex9

Ja, ich bin nun informiert und werde es eventuell es mal verwenden, wenn ich mal wieder eine Projektidee haben sollte 😅

0
KathaHohenfels 
Fragesteller
 10.04.2022, 13:18
@Kalkablagerung

ich wusste, dass es geht, da 1. unsere Aufgabenstellung an der Hochschule darauf ausgerichtet war, dass es irgendwie gehen muss und 2. habe ich im Java Grundkurs Buch von Dietmar Abts etwas dergleichen gefunden gehabt, wusste aber halt nicht, wie der Zugriff funktioniert, weil ich einen dummen Fehler gemacht hatte (siehe anderer Kommentar), sodass ich irgendwann gezweifelt habe, ob der Zugriff überhaupt funktioniert.

Das Bsp aus dem Buch war Folgendes:

public enum Note { SEHR_GUT(82, 90), GUT(70, 81), BEFRIEDIGEND(58, 69), AUSREICHEND(46, 57), MANGELHAFT(0, 45); private int von, bis; private Note(int von, int bis) { this.von = von; this.bis = bis; }

Aber es freut mich gerade mega dass ich durch meine Frage indirekt anderen auch etwas beibringen konnte:) Finde diese Möglichkeit mit den Enums in Java selber mega nice.

LG Kath

1