Java 14 新的 switch 表达式


参考:JEP 361: Switch Expressions (Standard)

Java 14 新的 switch 表达式

  • 在 Java 14 中,新的 switch 表达式主要改变了两个方面:
    • 支持箭头表达式返回;
    • 支持 yied 返回值。

1. Java 14 之前 switch 语法

import org.junit.Test;

enum Gender {
    MALE, FEMALE, UNKNOWN;
}

public class TestX {
    private Gender gender = Gender.MALE;

    @Test
    public void show() {
        switch (gender) {
            case MALE:
                System.out.println("男");
                break;
            case FEMALE:
                System.out.println("女");
                break;
            default:
                throw new IllegalStateException(gender.toString());
                break;
        }
    }
}

2. Java 14 switch 表达式

	@Test
    public void show() {
        switch (gender) {
            case MALE -> System.out.println("男");
            case FEMALE -> System.out.println("女");
            default -> throw new IllegalStateException(gender.toString());
        }
  • Java 14 的 switch 表达式使用箭头表达时,不需要在每一个 case 后都加上 break。

3. Java14 之前 switch 语法返回值

import org.junit.Test;

enum Gender {
    MALE, FEMALE, UNKNOWN;
}

public class TestX {
    public String swi(Gender gender) {
        String s;
        switch (gender) {
            case MALE:
                s = "男";
                break;
            case FEMALE:
                s = "女";
                break;
            default:
                throw new IllegalStateException(gender.toString());
        }
        return s;
    }

    @Test
    public void show() {
        String s = swi(Gender.UNKNOWN);
    }
}
  • 旧版不支持返回值,需要通过一个中间变量来返回。

4. Java14 switch 表达式返回值

	public String swi(Gender gender) {
        String s = switch (gender) {
            case MALE -> "男";
            case FEMALE -> "女";
            default -> throw new IllegalStateException(gender.toString());
        };
    }

5. Java 14 switch 表达式使用 yield 返回值

  • yield 和 return 的区别在于:return 会直接跳出当前循环或者方法,而 yield 只会跳出当前 switch 块;
	public String swi(Gender gender) {
        String s = switch (gender) {
            case MALE -> "男";
            case FEMALE -> "女";
            default -> {
                yield "未知";
            }
        };
    }

6. 使用分析

  • 新的 switch 表达式在旧的 JDK 版本中无法兼容,而且字节码文件反编译后也是旧的 switch 格式,所以不推荐使用新的 switch 表达式。

原文链接:https://qwert.blog.csdn.net/article/details/105132738

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值