jdk17新特性——Switch表达式增强

目录

    • 一、Switch表达式增强示例一
      • 1.1、传统的方式 case中变量赋值示例
      • 1.2、jdk17 case中变量赋值示例
    • 二、Switch表达式增强示例二
      • 2.1、传统的方式 case中值匹配多个示例
      • 2.2、jdk17 case中值匹配多个示例
    • 三、Switch表达式增强示例三
      • 3.1、传统的方式 case中需要多行业务代码示例
      • 3.2、jdk17中 case中需要多行业务代码示例
    • 四、Switch表达式增强示例四
      • 4.1、jdk17 case中支持对象的类型匹配示例

一、Switch表达式增强示例一

该特性先后由JDK12的JEP 325: Switch Expressions(Preview)、JDK13的JEP 354: Switch Expressions (Preview)引入,并在JDK14的JEP 361: Sitch Expressions正式转正。

1.1、传统的方式 case中变量赋值示例

  • 传统的方式 case中变量赋值代码示例

    package com.xz.jdk17;
    /**
     * @author: xz
     * @since: 2024/1/22 22:21
     * @description: 传统的方式 case中变量赋值示例
     */
    public class Test1 {
        public static void main(String[] args) {
            var name="张三";
            String alias;
            switch (name) {
                case "张三":
                    alias = "男性";
                    break;
                case "李四":
                    alias = "女性";
                    break;
                default:
                    alias = "未知";
                    break;
            }
            System.out.println(alias);
        }
    }
    
    
  • 输出结果
    jdk17新特性——Switch表达式增强_第1张图片

1.2、jdk17 case中变量赋值示例

  • jdk17 case中变量赋值代码示例

    package com.xz.jdk17;
    
    /**
     * @author: xz
     * @since: 2024/1/22 22:22
     * @description: jdk17 case中变量赋值示例
     */
    public class Test2 {
        public static void main(String[] args) {
            var name="张三";
            String alias =switch (name) {
                case "张三"->"男性";
                case "李四"->"女性";
                default->"未知";
            };
            System.out.println(alias);
        }
    }
    
  • 输出结果
    jdk17新特性——Switch表达式增强_第2张图片

二、Switch表达式增强示例二

2.1、传统的方式 case中值匹配多个示例

  • 传统的方式 case中值匹配多个代码示例

    package com.xz.jdk17;
    
    /**
     * @author: xz
     * @since: 2024/1/22  22:09
     * @description: 传统的方式 case中值匹配多个示例
     */
    public class Test3 {
        public static void main(String[] args) {
            var name="张三";
            String alias;
            switch (name) {
                case "李四":
                case "王五":
                    alias = "男性";
                    break;
                case "张三":
                case "赵六":
                    alias = "女性";
                    break;
                default:
                    alias = "未知";
                    break;
            }
            System.out.println(alias);
        }
    
    }
    
  • 输出结果
    jdk17新特性——Switch表达式增强_第3张图片

2.2、jdk17 case中值匹配多个示例

  • jdk17 case中值匹配多个代码示例

    package com.xz.jdk17;
    
    /**
     * @author: xz
     * @since: 2024/1/22 22:18
     * @description: jdk17 case中值匹配多个示例
     */
    public class Test4 {
        public static void main(String[] args) {
            var name="张三";
            String alias =switch (name) {
                case "李四","王五"->"男性";
                case "张三","赵六"->"女性";
                default->"未知";
            };
            System.out.println(alias);
        }
    }
    
    
  • 输出结果
    jdk17新特性——Switch表达式增强_第4张图片

三、Switch表达式增强示例三

3.1、传统的方式 case中需要多行业务代码示例

  • 传统的方式 case中需要多行业务代码示例

    package com.xz.jdk17;
    
    /**
     * @author: xz
     * @since: 2024/1/22 22:24
     * @description:  传统的方式 case中需要多行业务代码示例
     */
    public class Test5 {
        public static void main(String[] args) {
            var name="张三";
            String alias;
            switch (name) {
                case "李四":
                case "王五":
                    System.out.println("---男性---");
                    alias = "男性";
                    break;
                case "张三":
                case "赵六":
                    System.out.println("---女性---");
                    alias = "女性";
                    break;
                default:
                    System.out.println("---未知---");
                    alias = "未知";
                    break;
            }
            System.out.println(alias);
        }
    }
    
    
  • 输出结果
    jdk17新特性——Switch表达式增强_第5张图片

3.2、jdk17中 case中需要多行业务代码示例

  • jdk17中 case中需要多行业务代码示例

    package com.xz.jdk17;
    
    /**
     * @author: xz
     * @since: 2024/1/22 22:25
     * @description: jdk17中 case中需要多行业务代码示例
     */
    public class Test6 {
        public static void main(String[] args) {
            var name="张三";
            String alias =switch (name) {
                case "李四","王五"->{
                    System.out.println("---男性---");
                    yield "男性";
                }
                case "张三","赵六"->{
                    System.out.println("---女性---");
                    yield "女性";
                }
                default->{
                    System.out.println("---未知---");
                    yield "未知";
                }
            };
            System.out.println(alias);
        }
    }
    
  • 输出结果
    jdk17新特性——Switch表达式增强_第6张图片

四、Switch表达式增强示例四

4.1、jdk17 case中支持对象的类型匹配示例

  • jdk17 case中支持对象的类型匹配 代码示例

    package com.xz.jdk17;
    
    /**
     * @author: xz
     * @since: 2024/1/22 22:34
     * @description: jdk17 case中支持对象的类型匹配
     */
    public class Test7 {
        public static void main(String[] args) {
            Object obj = "张三";
            String patternMatchSwitch = getPatternMatchSwitch(obj);
            System.out.println(patternMatchSwitch);
        }
    
        private static String getPatternMatchSwitch(Object obj){
            return switch (obj) {
                case null->"obj is null";
                case Integer i ->String.format("Integer i:%s",i);
                case Long l ->String.format("Long l:%s",l);
                case Double d ->String.format("Double d:%s",d);
                case String str ->String.format("String str:%s",str);
                default -> obj.toString();
            };
        }
    }
    
  • 输出结果
    jdk17新特性——Switch表达式增强_第7张图片

你可能感兴趣的:(jdk17新特性,jdk17新特性)