Java混合传统与箭头式switch分支在Eclipse报错,需如何修改?
问题描述
我尝试使用如下格式的Java switch语句,该代码在IntelliJ IDEA中无编译错误,但在Eclipse中抛出编译错误。请问需要如何修改代码?
代码示例:
public static void main(String[] args) { // TODO Auto-generated method stub int switchValue = 3; switch(switchValue) { case 1: System.out.println("Value was 1"); case 2: System.out.println("Value was 2"); case 3,4,5 -> { System.out.println("Value was 3"); } default -> System.out.println("Was not 1,2,3,4 or 5"); } }
错误信息:
Exception in thread "main" java.lang.Error: Unresolved compilation problem:
Mixing of different kinds of case statements '->' and ':' is not allowed within a switchat keywords.Switchhh.main(Switchhh.java:12)
解决方案
这个错误的核心原因是同一个switch语句里混用了两种case语法:传统的case X:冒号写法,和Java 12+引入的switch表达式箭头->写法。Eclipse对这种混合写法的语法检查更严格,不允许此类混用。
你可以通过两种方式修复:
方式一:统一用传统switch语句(冒号写法)
给每个case添加break避免逻辑贯穿,同时把箭头语法改成多case冒号形式:
public static void main(String[] args) { int switchValue = 3; switch(switchValue) { case 1: System.out.println("Value was 1"); break; case 2: System.out.println("Value was 2"); break; case 3: case 4: case 5: System.out.println("Value was 3"); break; default: System.out.println("Was not 1,2,3,4 or 5"); } }
方式二:统一用switch表达式(箭头写法)
把所有case都改成箭头语法,保持语法风格一致:
public static void main(String[] args) { int switchValue = 3; switch(switchValue) { case 1 -> System.out.println("Value was 1"); case 2 -> System.out.println("Value was 2"); case 3,4,5 -> { System.out.println("Value was 3"); } default -> System.out.println("Was not 1,2,3,4 or 5"); } }
另外需要确认你的Eclipse已配置支持Java 12及以上版本,因为switch表达式是Java 12引入的预览特性,Java 14正式成为标准特性。
内容的提问来源于stack exchange,提问作者user2771427
相关产品推荐
相关产品推荐

