Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
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
}
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
}
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.
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.
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?