Switch Expressions (preview)

Wynika z JEP 325.
Szczegóły można znaleźć tutaj.
Instrukcja switch została rozszerzona i może być używana zarówno jako instrukcja jak i wyrażenie.
Rozszerzenie jest określone jako preview, czyli cecha eksperymentalna, która może zostać w przyszłości utrwalona, zmieniona albo usunięta.
Aby móc użyć cechy preview należy użyć specjalnej składni polecenia javac (przy używaniu linii poleceń) albo udzielić jawnej zgody w IDE.
Więcej o klasycznej instrukcji switch

Klasy

break działa jak return.
We wszystkich niżej przedstawionych klasach default jest bezużyteczne, ze względu na fakt, że wyrażenie musi być typu enum, a w wyliczeniu jest tylko 7 dni, a zatem default występuje tutaj tylko dla przykładu.

  • Klasa SwitchExpr1 – klasyczny switch
  • Klasa SwitchExpr2 – użycie -> zamiast :
  • Klasa SwitchExpr3 – grupowanie etykiet case
  • Klasa SwitchExpr4 – klasyczne użycie zmiennej
  • Klasa SwitchExpr5switch zwracający int (break 1)
  • Klasa SwitchExpr6switch zwracający String
  • Klasa SwitchExpr7switch zwracający String (break a)
Klasa SwitchExpr1
package swichexpr;

public class SwitchExpr1 {
    enum Dni {Pon, Wto, Sro, Czw, Pia, Sob, Nie}

    ;

    public static void main(String[] args) {
        Dni dzien = Dni.Wto;
        switch (dzien) {
            case Pon:
                System.out.println(dzien.ordinal());
                break;
            case Wto:
                System.out.println(dzien.ordinal());
                break;
            case Sro:
                System.out.println(dzien.ordinal());
                break;
            case Czw:
                System.out.println(dzien.ordinal());
                break;
            case Pia:
                System.out.println(dzien.ordinal());
                break;
            case Sob:
                System.out.println(dzien.ordinal());
                break;
            case Nie:
                System.out.println(dzien.ordinal());
                break;
            default:
                System.out.println("Nie ma takiego dnia");
        }
    }
}
Klasa SwitchExpr2
package swichexpr;

public class SwitchExpr2 {
    enum Dni {Pon, Wto, Sro, Czw, Pia, Sob, Nie}

    ;

    public static void main(String[] args) {
        Dni dzien = Dni.Wto;
        switch (dzien) {
            case Pon -> System.out.println(dzien.ordinal());
            case Wto -> System.out.println(dzien.ordinal());
            case Sro -> System.out.println(dzien.ordinal());
            case Czw -> System.out.println(dzien.ordinal());
            case Pia -> System.out.println(dzien.ordinal());
            case Sob -> System.out.println(dzien.ordinal());
            case Nie -> System.out.println(dzien.ordinal());
            default -> System.out.println("Nie ma takiego dnia");
        }
    }
}
Klasa SwitchExpr3
package swichexpr;

public class SwitchExpr3 {
    enum Dni {Pon, Wto, Sro, Czw, Pia, Sob, Nie}

    ;

    public static void main(String[] args) {
        Dni dzien = Dni.Wto;
        switch (dzien) {
            case Pon, Wto, Sro, Czw, Pia -> System.out.println("Dzień roboczy");
            case Sob, Nie  -> System.out.println("Dzeń wolny od pracy");
            default -> System.out.println("Nie ma takiego dnia");
        }
    }
}
Klasa SwitchExpr4
package swichexpr;

public class SwitchExpr4 {
    enum Dni {Pon, Wto, Sro, Czw, Pia, Sob, Nie}

    ;

    public static void main(String[] args) {
        Dni dzien = Dni.Wto;
        int dayNum = -1;
        switch (dzien) {
            case Pon:
                dayNum = dzien.ordinal();
                break;
            case Wto:
                dayNum = dzien.ordinal();
                break;
            case Sro:
                dayNum = dzien.ordinal();
                break;
            case Czw:
                dayNum = dzien.ordinal();
                break;
            case Pia:
                dayNum = dzien.ordinal();
                break;
            case Sob:
                dayNum = dzien.ordinal();
                break;
            case Nie:
                dayNum = dzien.ordinal();
                break;
            default:
                dayNum = 7;
        }
        System.out.println(dayNum);
    }
}
Klasa SwitchExpr5
package swichexpr;

public class SwitchExpr5 {
    enum Dni {Pon, Wto, Sro, Czw, Pia, Sob, Nie}

    ;

    public static void main(String[] args) {
        Dni dzien = Dni.Wto;
        int dayNum = switch (dzien) {
            case Pon -> dzien.ordinal();
            case Wto -> {
                break 1//zwraca 1;
            }
            case Sro -> 3//zwraca 3;
            case Czw -> dzien.ordinal();
            case Pia -> dzien.ordinal();
            case Sob -> dzien.ordinal();
            case Nie -> dzien.ordinal();
            default -> 7//zwraca 7;
        };
        System.out.println(dayNum);
    }
}
Klasa SwitchExpr6
package swichexpr;

public class SwitchExpr6 {
    enum Dni {Pon, Wto, Sro, Czw, Pia, Sob, Nie}

    ;

    public static void main(String[] args) {
        Dni dzien = Dni.Wto;
        String dayNum = switch (dzien) {
            case Pon, Wto, Sro, Czw, Pia -> "Dzień roboczy";
            case Sob, Nie -> "Dzień wolny od pracy";
            default -> "Nie ma takiego dnia";
        };
        System.out.println(dayNum);
    }
}
Klasa SwitchExpr7
package swichexpr;

import java.util.*;

public class SwitchExpr7 {
    enum Dni {Pon, Wto, Sro, Czw, Pia, Sob, Nie}

    ;

    public static void main(String[] args) {
        Dni dzien = Dni.Nie;
        String dayNum = switch (dzien) {
            case Pon, Wto, Sro, Czw, Pia -> "Dzień roboczy";
            case Sob -> "Sobota: dzień wolny od pracy";
            case Nie -> {
                Random ran = new Random();
                int dec = ran.nextInt(10);
                String a = dec < 5 ? "Niedziela: Idziesz na spacer" : "Niedziela: możesz pograć w gry";
                break a;

            }
            default -> "Nie ma takiego dnia";
        };
        System.out.println(dayNum);
    }
}

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *