Enum: Zugriff auf Konstanten

mehdiBen

Mitglied
Hallo zusammen.
Ich verstehe nicht, warum ich beim Test mit if Wochentag.Montag schreiben muss (Montag ist falsch).
Beim switch case darf ich Montag alleine schreiben.
Was ist der Unterschied?

Java:
public class TestEnum {
	public static void main(String[] a){
		
		Wochentag m = Wochentag.Montag;
		
		if(m == Wochentag.Montag) System.out.println("Mon");
		
		switch(m){
		case Montag: System.out.println("Mon");
		
		}
   }
}
enum Wochentag
{
    Montag, 
    Dienstag, 
    Mittwoch, 
    Donnerstag, 
    Freitag, 
    Samstag, 
    Sonntag
}
 
weil du vor dem switch(m), m den Wert Wochentag.Montag zugewiesen hast ?! 😉
 
Zuletzt bearbeitet:
Hallo zusammen.
Ich verstehe nicht, warum ich beim Test mit if Wochentag.Montag schreiben muss (Montag ist falsch).
Beim switch case darf ich Montag alleine schreiben.
Was ist der Unterschied?

Java:
public class TestEnum {
	public static void main(String[] a){
		
		Wochentag m = Wochentag.Montag;
		
		if(m == Wochentag.Montag) System.out.println("Mon");
		
		switch(m){
		case Montag: System.out.println("Mon");
		
		}
   }
}
enum Wochentag
{
    Montag, 
    Dienstag, 
    Mittwoch, 
    Donnerstag, 
    Freitag, 
    Samstag, 
    Sonntag
}

Das wird wohl einfach eine unsinnige Sache von Java sein. Deklariere am Besten deinen enum in einer eigenen Datei:
Wochentag.java
Java:
public enum Wochentag {

    Montag(), 
    Dienstag(), 
    Mittwoch(), 
    Donnerstag(), 
    Freitag(), 
    Samstag(), 
    Sonntag();
}

Dann kann dir das keine Probleme mehr bereiten. Liegt wohl an der inneren Klasse.
 
Zuletzt bearbeitet:
Hm,
ich bin noch nicht zufrieden.
Beide Konstruktionen vergleichen doch den Wert m mit dem Konstanten Wert Wochentag.Montag.
Ist es eine Spezialität von switch, dass es die Konstanten ohne vorangestellten Enum-Name erkennt?
B
 
Genau so ist es. Da du den Enum-Typ ja bereits im switch(...) implizit angibst, weiß der Compiler in welchem Enum er gucken muss, und du musst nur noch die Konstanten an sich hinschreiben.

Das ist eine Sonderheit des switch und ansonsten (außer im enum selbst) so nicht möglich.
 
du könntest ja folgendes haben:

Java:
public enum Werktag{
    Montag;
}

public enum Wochentag {
    Montag;
}

...
Wochentag t = Wochentag.Montag;
if (t == Montag) .. //welcher is nun gemeint?
Daher macht es Sinn in der if-Anweisung auch zu unterscheiden. Beim Switch weiss er, wie mein Vorredner bereits sagt implizit durch die Variablen-Deklaration, welche Werte diese annehmen kann.
 
Zuletzt bearbeitet:
Danke, jetzt bin ich zufrieden.

Bevor der Thread stirbt noch die Anschlussfrage. KAnn ich per import static (oder anders) erreichen, dass es ausreicht Montag zu schreiben, wenn ich Wochentag in einer eigenen Datei definiere?
 

Zurück
Oben