首页 > 其他分享 >JDK有用的新特性-Switch

JDK有用的新特性-Switch

时间:2023-07-16 10:33:26浏览次数:39  
标签:case JDK int memo switch yield 有用 Switch println

目录
Switch 的三个方面,参考: JEP 361

  • 支持箭头表达式
  • 支持 yied 返回值
  • 支持 Java Record

箭头表达式,新的 case 标签

Switch 新的语法,case label -> 表达式|throw 语句|block

case label_1, label_2, ..., label_n -> expression;|throw-statement;|block
step1:新的 case 标签

week:表示周日(1)到周六(7),1 和 7 是休息日,其他是工作日。如果 1-7 以外为无效日期

@Test
    public void test01() {
        int week = 7;
        String memo = "";//表示计算结果
        switch (week){
            case 1 -> memo = "星期日,休息";
            case 2,3,4,5,6 -> memo = "工作日";
            case 7 -> memo ="星期六,休息";
            default -> throw new RuntimeException("无效的日期");
        }
        System.out.println("memo = " + memo);
    }

yeild 返回值

yeild 让 switch 作为表达式,能够返回值

语法
变量 = switch(value) { case v1: yield 结果值; case v2: yield 结果值;case v3,v4,v5.. yield 结果值 }
示例: yield 返回值,跳出 switch 块

@Test
    public void test02() {
        int week = 2;
        String memo = switch (week){
            case 1 :yield "星期日";
            case 2,3,4,5,6 :yield  "工作日";
            case 7 : yield "星期六";
            default:yield "无效日期";
        };
        System.out.println("memo = " + memo);
    }

无需中间变量, switch 作为表达式计算,可以得到结果。yield 是表达式的返回值

示例: 多表达式, case 与 yield 结合使用

 @Test
    public void test03() {
        int week = 3;
        String memo = switch (week){
            case 1 -> {
                System.out.println("星期日,执行了自定义代码");
                yield "星期日";
            }
            case 2,3,4,5,6 -> {
                System.out.println("工作日,执行了自定义代码");
                yield "2-6工作日";
            }
            case 7 -> {
                System.out.println("星期六,执行了自定义代码");
                yield "星期六";
            }
            default -> {
                System.out.println("执行了自定义代码");
                yield "其他日期";
            }
        };
        System.out.println("memo = " + memo);
    }

提示:
case 标签-> 与 case 标签:不能混用。 一个 switch 语句块中使用一种语法格式。
switch 作为表达式,赋值给变量,需要 yield 或者 case 标签-> 表达式。->右侧表达式为 case 返回值。

示例:

public void test(){
    int week = 1;
    //yield 是 switch 的返回值, yield 跳出当前 switch 块
    String memo = switch (week){
    case 1 ->{
    System.out.println("week=1 的 表达式部分");
    yield "星期日,休息";
    }
    case 2,3,4,5,6 ->{
        System.out.println("week=2,3,4,5,6 的 表达式部分");
        yield "工作日";
    }
    case 7 -> "星期六,休息";
    default -> "无效日期";
    };
    System.out.println("week = " + memo);
   }
}

Java Record

switch 表达式中使用 record,结合 case 标签-> 表达式,yield 实现复杂的计算
step1: 准备三个 Record

public record Line(int x,int y) {
}
public record Rectangle(int width,int height) {
}
public record Shape(int width,int height) {
}

step2: switch record

@Test
    public void test04() {
        //创建对象
        Line line = new Line(10,20);
        Rectangle rectangle = new Rectangle(20,50);
        Shape shape = new Shape(50,80);
        Object obj = line;
        int result = switch (obj){
            case Line(int x,int y) -> {
            System.out.println("图形是Line,x:"+ x +",y:" +y);
            yield x+y;
            }
            case Rectangle(int w,int h) -> 2*(w+h);
            case Shape(int x,int y) ->{
                System.out.println("图形Shape");
                yield x*y;
            }
            default -> 0;
        };
        System.out.println("result = " + result);
    }

case Line , Rectangle,Shape 在代码块执行多条语句,或者箭头->表达式。

公众号本文地址:https://mp.weixin.qq.com/s/TncbVznOSbVIShEQxOny8w
欢迎关注公众号:愚生浅末。


推荐阅读

  1. JDK有用的新特性-Java Record

  2. 严蔚敏 数据结构 配套教材 PDF

  3. 四款AI辅助工具,太强了...

标签:case,JDK,int,memo,switch,yield,有用,Switch,println
From: https://www.cnblogs.com/kohler21/p/17557090.html

相关文章

  • 太爆了!阿里最新出品2023版JDK源码学习指南,Github三天已万赞
    近后台收到很多粉丝私信,说的是程序员究竟要不要去读源码?当下行情,面试什么样的薪资/岗位才会被问到源码?对此,我的回答是:一定要去读,并且要提到日程上来!据不完全统计,现在市面上不管是初级,中级,还是高级岗,面试的时候都有可能会问到源码中的问题,它已经成为程序员常规必备的一个技术点。如......
  • JDK有用的新特性-Java Record
    目录JavaRecordRecord使用InstanceMethods静态方法StaticMethodRecord的构造方法step1:紧凑和定制构造方法Record与与LombokRecord实现接口LocalRecord嵌套Recordinstanceof判断Record类型总结JavaRecordJava14中预览的新特性叫做Record,在Java中,Record是一......
  • jdk1.8 的的安装和配置
    软件包下载链接:https://pan.baidu.com/s/1KNdKTtesoVhpmVsoXaz-dg提取码:54qe--来自百度网盘超级会员V6的分享1、打开运行软件 2、安装引导下一步 3、默认安装在c盘符,比较小,占不了多少空间 4、jre的安装路径 5、安装结束 6、找到安装路径,将路径存放在记事本中,以......
  • java代替Switch 的方法
    Java代替Switch的方法在Java编程中,我们经常使用switch语句来根据不同的条件执行不同的代码块。然而,当有大量的条件需要判断时,switch语句会变得冗长而且难以维护。幸运的是,Java提供了一些替代switch语句的方法,使代码更加简洁和可读性更强。1.使用多态多态是面向对象编程的重要概......
  • jdk的新特征
    jdk11新特征: https://my.oschina.net/u/4662964/blog/5783779 依赖升级: 在JDK8中JavaSE和JavaEE有很多共享代码,但是JDK11中这两部分独立了,JavaEE相关模块被移除,无法编译,因此需要添加包括这些包的第三方依赖如:编译时@Resource/@PostConstruct等注解找不到,需......
  • 详解在Linux中修改Tomcat使用的jdk版本
    问题分析由于部署个人项目使用了openjdk11,但是我之前安装的是jdk1.8,jdk版本升级的后果就是,tomcat运行的时候报一点小bug(因为之前安装tomcat默认使用了系统的jdk版本)所以就想着把tomcat使用的jdk版本调回原来的,找了很多资料之后,决定在tomcat的运行文件中覆盖使用的jdk版本路径......
  • 7个有用的Prompt参数
    ChatGPT和Midjournal使得生成式人工智能的应用程序激增。当涉及到生成式AI时,"prompt"通常指的是作为输入给模型的初始提示或指示。它是一个短语、问题、句子或段落,用来引导模型生成相关的响应或文本。在使用生成式AI模型时,提供一个清晰、具体的prompt非常重要,因为它会直接影响到......
  • javaJDK8时间类1之ZoneId时区
    一:ZoneId的介绍ZoneId用于标识用于在Instant和LocalDateTime之间进行转换的规则。ID有两种不同的类型:•固定的偏移量-相对于UTC/格林威治标准时间的完全解析的偏移量,它对所有本地日期时间都使用相同的偏移量•地理区域-适用于查找与UTC/格林威治的偏移量的一组特定规则的区域大多......
  • 异常 if switch finaly
    publicclassDemo05{publicstaticvoidmain(String[]args){Scannerin=newScanner(System.in);//一旦发生异常,产生异常对象,抛给虚拟机JVM,JVM中止后面的代码。将异常信息全部打印到控制台。程序结束。//输入不匹配异常java.util.Inp......
  • java JDK安装及配置
    javaJDK安装及配置windows11jdk-8u261-windows-x64.exe1、点击安装,一路默认即可2、设置系统环境变量新建JAVA_HOME指明JDK安装路径,就是刚才安装时所选择的路径C:\ProgramFiles\Java\jdk1.8.0_261,此路径下包括lib,bin,jre等文件夹(此变量最好设置,因为以后运行tomcat,eclipse等......