牛叔叔 的笔记

好好学习

2020-04-08 15:10

JDK14中的switch扩展

牛叔叔

JavaEE

(1155)

(0)

收藏

2020年3月17日,Oracle正式发布了JDK14版本,其中扩展了switch的新功能如下:


switch 表达式扩展了 switch 语句,使其不仅可以作为语句(statement),还可以作为表达式(expression),并且两种写法都可以使用传统的 switch 语法,或者使用简化的“case L ->”模式匹配语法作用于不同范围并控制执行流。


传统写法需要使用break来避免case贯穿

 

1.case L -> 标签取消了贯穿功能 case后面的常量可以使用逗号来分割多个常量

看下代码


public class SwitchTest {    
public static void main(String[] args) {
        Weekday day = Weekday.MON; //初始化一个枚举变量
        //case L:标签具有贯穿功能
        switch (day){//不需要break;
            case MON, TUE, WEN -> {
                System.out.println("上半周");
                String s = "abc"; //局部变量只在当前代码块有效
            }            
            case THU, FRI      -> {
                System.out.println("下半周");
                String s = "def";
            }            
            case SAT, SUN      -> {
                System.out.println("周末");
            }
        }
        System.out.println("12");
}//定义枚举enum Weekday{
    MON,TUE,WEN,THU,FRI,SAT,SUN
}


运行结果:

上半周

12


2.JDK14中扩展了switch可以作为表达式进行赋值或打印操作


public class SwitchTest {    public static void main(String[] args) {
        Weekday day = Weekday.MON; //初始化一个枚举变量

        //JDK14中扩展了switch可以作为表达式
        //将表达式的值打印出来
        System.out.println(switch(day){            
            case MON, TUE, WEN -> "上半周";            
            case THU, FRI      -> "下半周";            
            case SAT, SUN      -> "周末";
        });        
        //将表达式的值赋值给一个变量
        String text = switch(day){            
            case MON, TUE, WEN -> "上半周";            
            case THU, FRI      -> "下半周";            
            case SAT, SUN      -> "周末";
        };        
        //通过yield产生一个新的值
        day = Weekday.SAT;        
        int x = switch(day){            
        case MON, TUE, WEN -> 1;            
        case THU, FRI      -> 2;            
        case SAT, SUN      -> {                
            int rnd = (int)(Math.random()*10);  
            //生成一个(0,10)内的随机整数
          System.out.println("rnd = " + rnd);
          yield rnd;  
          //通过yield产生一个新的值
          };
        };

        System.out.println("x = " + x);
    }
    }
    //定义枚举enum 
    Weekday{
    MON,TUE,WEN,THU,FRI,SAT,SUN
    }


0条评论

点击登录参与评论