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

Lambda表达式中能否使用可变长度参数(int ...x)?如何正确使用?

Lambda表达式中使用可变长度参数(int ...x)的正确方法

Lambda表达式完全支持使用可变长度参数,你的错误源于对可变参数的本质理解和处理逻辑有误,下面一步步说明问题和解决方法:

为什么会出现"Operator '+' cannot be applied to 'int[]','int'"错误?

Java中可变长度参数int... x在编译时会被转换成int[] x,也就是你的Lambda参数x实际是一个数组对象。你写的(x) -> x+1试图直接把数组和int值做加法,这显然不符合语法规则,所以报错。

正确使用可变参数的Lambda写法

既然可变参数本质是数组,你需要遍历数组元素完成逻辑。比如要实现求和功能,可以这样写:

class calculations {
    public static void main(String[] args) {
        func obj = (x) -> {
            int total = 0;
            for (int num : x) {
                total += num;
            }
            return total;
        };
        // 支持传入任意数量的int参数
        int singleResult = obj.sum(10);
        int multiResult = obj.sum(1, 2, 3, 4);
        int emptyResult = obj.sum(); // 传入0个参数,返回0
        System.out.println(singleResult); // 输出10
        System.out.println(multiResult); // 输出10
        System.out.println(emptyResult); // 输出0
    }
}

interface func {
    int sum(int... x);
}

也可以用Stream简化遍历逻辑:

func obj = (x) -> java.util.Arrays.stream(x).sum();

为什么(x,y,w) -> x+y+w无法生效?

你的接口方法签名是int sum(int... x),对应的Lambda必须匹配这个方法的参数列表——可变参数在方法签名里是单个参数(数组类型),而不是三个独立的int参数。所以Lambda不能拆成多个参数,必须用单个参数(可以写成(int... x)或者(x),编译器都会识别为数组)。

如果想让Lambda接受三个独立参数,你需要修改接口的方法签名为int sum(int x, int y, int w),但这就失去了可变参数支持任意数量参数的灵活性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 13:15:41