Zielony Smok - logo witryny

Java 14: switch expressions (standard)

Podstawa: https://openjdk.java.net/jeps/361

JEP 361 ewoluował z https://openjdk.java.net/jeps/325 (Java 12) i https://openjdk.java.net/jeps/354″ (Java 13).

Pisaliśmy o tym we wpisach Java 12: Switch Expressions oraz Java 13: switch expressions (2).

Od Java 14 wyrażenia przełącznikowe (switch expressions) przechodzą do standardu języka Java.

Przypomnijmy zatem sposoby używania konstrukcji switch.

Klasa SwitchExpr1
package switchexpr3;

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");
        }
    }
}

Po uruchomieniu na konsoli zobaczymy:

1
Klasa SwitchExpr2
package switchexpr3;

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");
        }
    }
}

Po uruchomieniu na konsoli zobaczymy:

1
Klasa SwitchExpr3
package switchexpr3;

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");
        }
    }
}

Po uruchomieniu na konsoli zobaczymy:

Dzień roboczy
Klasa SwitchExpr4
package switchexpr3;

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);
    }
}

Po uruchomieniu na konsoli zobaczymy:

1
Klasa SwitchExpr5
ackage switchexpr3;

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

    public static void main(String[] args) {
        Dni dzien = Dni.Nie;
        int dayNum = switch (dzien) {
            case Pon, Czw, Pia, Sob -> dzien.ordinal();
            case Wto -> {
                yield dzien.ordinal();
            }
            case Sro -> {
                yield 2;
            }
            case Nie -> {
                System.out.println("Dziś jest niedziela");
                yield dzien.ordinal();
            }
        };
        System.out.println(dayNum);
    }
}

Po uruchomieniu na konsoli zobaczymy:

Dziś jest niedziela
6
Klasa SwitchExpr6
package switchexpr3;

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);
    }
}

Po uruchomieniu na konsoli zobaczymy:

Dzień roboczy
Klasa SwitchExpr7
package switchexpr3;

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);
                yield dec < 5 ? "Niedziela: Idziesz na spacer" : "Niedziela: możesz pograć w gry";
            }
        };
        System.out.println(dayNum);
    }
}

Po uruchomieniu na konsoli zobaczymy:

Niedziela: możesz pograć w gry