56 多个case
标签
在 JDK12 之前,switch
语句允许每个case
有一个标签。从switch
表达式开始,case
可以有多个用逗号分隔的标签。请看下面举例说明多个case
标签的方法:
private static SportType fetchSportTypeByPlayerType(PlayerTypes playerType) { return switch (playerType) { case TENNIS, GOLF, SNOOKER -> new Individual(); case FOOTBALL, VOLLEY -> new Team(); }; }
因此,如果我们传递给这个方法TENNIS
、GOLF
或SNOOKER
,它将返回一个Individual
类的实例。如果我们通过了FOOTBALL
或VOLLEY
,它将返回一个Team
类的实例。
57 case
语句块
标签的箭头可以指向单个语句(如前两个问题中的示例)或大括号中的块。这与 Lambda 块非常相似。查看以下解决方案:
private static Player createPlayer(PlayerTypes playerType) { return switch (playerType) { case TENNIS -> { System.out.println("Creating a TennisPlayer ..."); break new TennisPlayer(); } case FOOTBALL -> { System.out.println("Creating a FootballPlayer ..."); break new FootballPlayer(); } case SNOOKER -> { System.out.println("Creating a SnookerPlayer ..."); break new SnookerPlayer(); } default -> throw new IllegalArgumentException( "Invalid player type: " + playerType); }; }
注意,我们通过break
而不是return
从花括号块中退出。换句话说,虽然我们可以从一个switch
语句中return
,但我们不能从一个表达式中return
。
总结
这就是所有的人!本章向您介绍了几个涉及对象、不变性和switch
表达式的问题。虽然覆盖对象和不变性的问题代表了编程的基本概念,但覆盖switch
表达式的问题致力于引入新的 JDK12 特性来解决这个问题。
从本章下载应用以查看结果和其他详细信息。****