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

Java 17能否创建可向父块返回/yield值的局部代码块?

在Java 17中实现带返回值的局部代码块

Java的普通局部代码块(仅用{}包裹的代码段)无法直接向父代码块返回值,但可以通过函数式接口模拟你想要的“带返回值的局部逻辑块”效果,以下是两种可行方案:

1. 用Supplier函数式接口实现

这是最贴近你需求的写法,通过Supplier的get()方法执行代码块并返回结果:

public void calculateSomething(int a, int b) {
    double c = ((Supplier<Double>) () -> {
        double aSquare = Math.pow(a, 2);
        double bSquare = Math.pow(b, 2);
        double cSquare = aSquare + bSquare;
        return Math.sqrt(cSquare);
    }).get();
    
    // 后续使用c做其他操作
    System.out.println("计算结果:" + c);
}

注意:Math.pow返回double类型,如果你需要int类型的结果,可以在接收时做强制转换(比如int c = (int) ...get();)。

2. 拆分变量的简化写法

如果觉得上面的写法太紧凑,可以把逻辑块拆成单独的Supplier变量,代码可读性更好:

public void calculateSomething(int a, int b) {
    Supplier<Double> calculateC = () -> {
        double aSquare = Math.pow(a, 2);
        double bSquare = Math.pow(b, 2);
        double cSquare = aSquare + bSquare;
        return Math.sqrt(cSquare);
    };
    
    double c = calculateC.get();
    // 后续操作
}

另外提一下你示例代码里的几个小错误:

  • 参数名intb应该写成int b(变量名不能连写)
  • Math.root是拼写错误,正确的平方根方法是Math.sqrt
  • cSuare应为cSquare(拼写错误)

内容的提问来源于stack exchange,提问作者andi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 23:42:42