专栏目录

三、Java 9 ~ 17 新特性试读

Java 14 新特性:增强版 switch

友情提示

推荐您使用 Chrome 浏览器来阅读本实战专栏,其他浏览器可能存在兼容性问题。

本小节中,我们来学习一下 Java 14 中添加的新特性,增强版的 —— switch 语句。

1. 老版本使用示例

首先,我们来看一段 Java 14 之前的版本中, switch 语句的使用示例,代码如下:

    /**
     * 输入数字,控制台打印对应的英文
     * @param num
     */
    public static void say(int num) {
        // JDK 14 之前 switch 的使用示例
        switch (num) {
            case 1:
                System.out.println("犬小哈说:one");
                break;
            case 2:
                System.out.println("犬小哈说:two");
                break;
            case 3:
            case 4:
                System.out.println("犬小哈说:three or four");
                break;
            default:
                System.out.println("犬小哈说: default");
        }
    }

    public static void main(String[] args) {
        // 从 0 循环到 4 ,调用 say() 方法
        IntStream.range(0, 5).forEach(i -> say(i));
    }

代码解释:

  • 定义一个 say() 方法,入参为一个 int 类型的数字,通过 swtich 语句对其进行判断,将其转换为英文,并打印到控制台;
  • 从 0 到 4 , 循环调用 say() 方法,查看效果;

控制台输出如下:

2. 箭头语法

在 Java 14 中,我们可以通过箭头语法,对上面的代码做一下简化,无需添加 break 关键字,如下:

    /**
     * 输入数字,控制台打印对应的英文
     * @param num
     */
    public static void say(int num) {
        // JDK 14 中的 switch 的使用示例
        switch (num) {
            case 1 -> System.out.println("犬小哈说:one");
            case 2 -> System.out.println("犬小哈说:two");
            case 3, 4 -> System.out.println("犬小哈说:three or four");
            default -> System.out.println("犬小哈说: default");
        }
    }

    public static void main(String[] args) {
        // 从 0 循环到 4 ,调用 say() 方法
        IntStream.range(0, 5).forEach(i -> say(i));
    }

控制台输出如下:

注意: 不能在 switch 语句中,同时使用 -> 箭头: 冒号

3. 作为表达式使用

在老版本中,switch 只能充当语句来使用,并不能生成结果。 在 Java 14 之后,可以将 switch 当做表达式来使用。请看下面这段示例代码:

    /**
     * 将字母转换为数字
     * @param letter
     * @return
     */
    public static int convert2Num(String letter) {
        // JDK 14 中的 switch 的使用示例
        int num = switch (letter) {
            case "A": yield 1;
            case "B": yield 2;
            case "C": yield 3;
            default: yield 0;
        };

        return num;
    }

    public static void main(String[] args) {
    	// 循环字母 A、B、C、D ,并转化为对应的数字输出到控制台
        for (String letter : new String[]{"A", "B", "C", "D"}) {
            System.out.println(convert2Num(letter));
        }
    }

代码解释:

  • 定义一个 convert2Num() 方法,用于将入参中的 letter 字母转换为对应的数字,在使用旧版本 : 冒号语法的同时,通过 yield 关键字从 switch 中返回结果;
  • 从 A 循环到 D, 调用 convert2Num() 方法;

控制台输出如下:

同样的,我们可以通过箭头语法对上面的代码做简化,同时省略了 yield 关键字,简洁了不少,有木有,如下:

    /**
     * 将字母转换为数字
     * @param letter
     * @return
     */
    public static int convert2Num(String letter) {
        // JDK 14 中的 switch 的使用示例
        int num = switch (letter) {
            case "A" -> 1;
            case "B" -> 2;
            case "C" -> 3;
            default -> 0;
        };

        return num;
    }

    public static void main(String[] args) {
        // 循环字母 A、B、C、D ,并转化为对应的数字输出到控制台
        for (String letter : new String[]{"A", "B", "C", "D"}) {
            System.out.println(convert2Num(letter));
        }
    }

4. 代码块的支持

当我们在箭头语法中,有多行代码逻辑时,可以通过 {} 大括号包裹住,示例代码如下:

    /**
     * 将字母转换为数字
     * @param letter
     * @return
     */
    public static int convert2Num(String letter) {
        // JDK 14 中的 switch 的使用示例
        int num = switch (letter) {
            case "A" -> 1;
            case "B" -> 2;
            case "C" -> {
                System.out.println("当前字母为:C");
                yield 3;
            }
            default -> 0;
        };

        return num;
    }

控制台输出如下:

最后编辑于 2024-04-26 19:53:27