java中switch表达式_1分钟了解 Java 中新的 Switch 表达式

2020 年 3 月份 Java 14 发布。

其中有一个有趣的更新:新的 Switch 表达式。

看代码前,看一下环境:MacOS,OpenJDK 14:

748753e37da4

让我们先看一下 Java 中经典的 Switch 语句:

public class SwitchStatementDemo {

enum MyDogs {

Winston, Sprite, Buster, Oscar, Speedy

}

enum Breed {

GoldenRetriever, ShetlandSheepdog, Teddy

}

public static void main(String[] args) {

printBreed(MyDogs.Winston);

printBreed(MyDogs.Oscar);

printBreed(MyDogs.Speedy);

}

static void printBreed(MyDogs dog) {

switch (dog) {

case Winston:

case Sprite:

System.out.printf("%s, breed is %s %n", dog, Breed.GoldenRetriever);

break;

case Buster:

case Oscar:

System.out.printf("%s, breed is %s %n", dog, Breed.ShetlandSheepdog);

break;

case Speedy:

System.out.printf("%s, breed is %s %n", dog, Breed.Teddy);

break;

default:

throw new IllegalArgumentException(

String.format("Unknown breed: %s", dog));

}

}

}

然后,让我们直接来看一下新的 Switch 表达式:

static void anotherPrintBreed(MyDogs dog) {

String breed = switch (dog) {

case Winston, Sprite -> "GoldenRetriever";

case Buster, Oscar -> "ShetlandSheepdog";

case Speedy -> "Teddy";

};

System.out.printf("%s, breed is %s %n", dog, breed);

}

我们可以看到,新的 Switch 语句将不需要再写 case 标签,而是用 -> 代替。

同时,也可以省略 default 但是此时 case 中需要包含所有可能的输入值。

否则,default 还是必须的:

// 添加多一个 Nono。

enum MyDogs {

Winston, Sprite, Buster, Oscar, Speedy, Nono

}

// 此时case 没有包括 Nono 的话,需要添加 default 语句

static void anotherPrintBreed(MyDogs dog) {

String breed = switch (dog) {

case Winston, Sprite -> "GoldenRetriever";

case Buster, Oscar -> "ShetlandSheepdog";

case Speedy -> "Teddy";

default -> "default";

};

System.out.printf("%s, breed is %s %n", dog, breed);

}

使用 default, 我们还可以通过花括号添加额外的信息:

static void anotherPrintBreed(MyDogs dog) {

String breed = switch (dog) {

case Winston, Sprite -> "GoldenRetriever";

case Buster, Oscar -> "ShetlandSheepdog";

case Speedy -> "Teddy";

default -> {

System.out.println("default语句被执行了。");

yield "default";

}

};

System.out.printf("%s, breed is %s %n", dog, breed);

}

default 语句必须给一个值,我们需要使用 yield 关键字来设置默认值。

以下是最终的代码例子:

public class SwitchStatementDemo {

enum MyDogs {

Winston, Sprite, Buster, Oscar, Speedy, Nono

}

enum Breed {

GoldenRetriever, ShetlandSheepdog, Teddy

}

public static void main(String[] args) {

// printBreed(MyDogs.Winston);

// printBreed(MyDogs.Oscar);

// printBreed(MyDogs.Speedy);

anotherPrintBreed(MyDogs.Winston);

anotherPrintBreed(MyDogs.Oscar);

anotherPrintBreed(MyDogs.Speedy);

anotherPrintBreed(MyDogs.Nono);

}

static void anotherPrintBreed(MyDogs dog) {

String breed = switch (dog) {

case Winston, Sprite -> "GoldenRetriever";

case Buster, Oscar -> "ShetlandSheepdog";

case Speedy -> "Teddy";

default -> {

System.out.println("default语句被执行了。");

yield "default";

}

};

System.out.printf("%s, breed is %s %n", dog, breed);

}

static void printBreed(MyDogs dog) {

switch (dog) {

case Winston:

case Sprite:

System.out.printf("%s, breed is %s %n", dog, Breed.GoldenRetriever);

break;

case Buster:

case Oscar:

System.out.printf("%s, breed is %s %n", dog, Breed.ShetlandSheepdog);

break;

case Speedy:

System.out.printf("%s, breed is %s %n", dog, Breed.Teddy);

break;

default:

throw new IllegalArgumentException(

String.format("Unknown breed: %s", dog));

}

}

}

文晓欢欢

2020.03.23

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值