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 特性来解决这个问题。
从本章下载应用以查看结果和其他详细信息。****