Wie kann ich auf die Variablenattribute eines Enums zugreifen (Java)?
Folgendes habe ich programmiert:
package Woche;
public enum Wochentag {
MONTAG(false),
DIENSTAG(false),
MITTWOCH(false),
DONNERSTAG(false),
FREITAG(false),
SAMSTAG(true),
SONNTAG(true);
public boolean wochenende;
private Wochentag(boolean wochenende){
this.wochenende = wochenende;
}
}
Ich habe außerdem eine Liste implementiert, in der per Zufall Wochentage generiert werden. Nun möchte ich überprüfen, wie oft ein Wochentag generiert wurde, bei dem wochenende == true ist (also im Prinzip wie oft SAMSTAG und SONNTAG generiert wurde), aber ohne direkt auf SAMSTAG oder SONNTAG zuzugreifen, sondern indem ich darauf prüfe, ob wochenende true oder false beim jeweiligen Wochentag ist. Wie geht das? Wie greife ich auf diese Variablenattribute zu?
LG Kath
3 Antworten
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);
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;
}
Ich glaube da reicht ein simples
if(generierterWochentag){
//ist SA oder SO
}
bin mir aber nicht 100%ig sicher, also einfach mal probieren ;)
Die Variable generierterWochentag würde doch nur auf eine Instanz des Enums zeigen, aber den Wert des Feldes wochenende überhaupt nicht erfragen.
genau so sollen wir es aber nicht machen, wir sollen nicht überprüfen, ob es SO oder SA ist, sondern über eben diese Attribute...
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.
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.
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...
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.
Ja, ich bin nun informiert und werde es eventuell es mal verwenden, wenn ich mal wieder eine Projektidee haben sollte 😅
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
Ich bin Studentin und benutze IntelliJ.
Dankeschön, ich habe es jetzt auch hinbekommen! Mein Fehler war der folgende gewesen:
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