Wynika z JEP https://openjdk.java.net/jeps/354.
Wcześniejsze zmiany wprowadzone w Java 12 zostały omówione tutaj.
W Java 13 podstawową zmiana jest dodanie słowa słowa yield
.
Jeżeli konstrukcja switch
zwraca dane, wówczs można użyć słowa yield
. Przykłady przedstawione w pierwszej części zachowują wartość z wyjątkiem przykładów w klasach:
SwitchExpr5.java
i SwitchExpr7.java
.
Klasy
SwitchExpr5.java
package switchexpr2; 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 klasy otrzymujemy na konsoli:
Dziś jest niedziela 6
Uwagi
W przypadku Sro
mozna było zastosować case Sro -> 2;
.
Każdy z przypadków pojedynczych case
lub gałęzi case
musi zwracać wynik.
Nie ma default
ponieważ wszystkie możliwości wynikające z enum Dni
są wyczerpane
(użyte) w konstrukcji switch
.
SwitchExpr7.java
package switchexpr2; 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 otrzymujemy na konsoli:
Niedziela: Idziesz na spacer
Uwagi
Nie ma default
ponieważ wszystkie możliwości wynikające z enum Dni
zostały użyte w konstrukcji switch
.