JDK17中带yield的Java switch表达式编译失败问题咨询
带yield的switch表达式编译失败原因分析
你遇到的问题是混用了switch表达式的两种语法形式,这是Java语法不允许的:
- 当switch分支使用
->箭头形式时,箭头右侧直接是表达式或代码块:- 如果是表达式(比如直接写字符串),它会自动作为该分支的返回值,不需要额外加
yield; - 如果要使用
yield,必须把箭头右侧改成代码块(用{}包裹),在代码块里通过yield返回值。
- 如果是表达式(比如直接写字符串),它会自动作为该分支的返回值,不需要额外加
你的原代码里,箭头右侧直接写了yield语句,但没有用代码块包裹,这违反了语法规则,所以编译失败;移除yield后,箭头右侧变成合法的字符串表达式,自然就能正常编译。
两种正确写法示例
写法一:移除yield,保留箭头表达式形式
private static String getText(int number) { return switch (number) { case 1, 2 -> "one or two"; case 3 -> "three"; case 4, 5, 6 -> "four or five or six"; default -> "unknown"; }; }
写法二:保留yield,改用代码块形式
private static String getText(int number) { return switch (number) { case 1, 2 -> { yield "one or two"; }; case 3 -> { yield "three"; }; case 4, 5, 6 -> { yield "four or five or six"; }; default -> { yield "unknown"; }; }; }
JDK 17完全支持这两种switch表达式的写法,只要遵循语法规则即可。
内容的提问来源于stack exchange,提问作者gongliming7
相关产品推荐
相关产品推荐

