You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.23 14:15:30