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

现代Java中如何实现带三个参数的Callback(回调)?

如何在Java中实现带三个参数的Callback(TriFunction)

在现代Java中,带1-2个参数的回调可以直接借助java.util.function包下的Function、BiFunction等原生接口实现,就像你给出的双参数示例那样。但Java标准库并未提供TriFunction接口,要实现带三个参数的回调,最直观且常用的方案有以下几种:

方法一:自定义函数式接口

函数式接口的核心是仅包含一个抽象方法,我们可以自己定义一个支持三个输入参数的接口:

@FunctionalInterface
public interface TriFunction<T, U, V, R> {
    // 接收三个参数,返回指定类型结果
    R apply(T t, U u, V v);
}

定义完成后,就能像使用BiFunction一样调用它,示例代码如下:

class Calculator {
    public static Double sumThree(Double num1, Double num2, Double num3) {
        return num1 + num2 + num3;
    }

    public static void main(String[] args) {
        // 方法引用绑定自定义接口
        TriFunction<Double, Double, Double, Double> triFunc = Calculator::sumThree;
        // 调用apply方法传入三个参数
        System.out.println(triFunc.apply(1.5, 2.5, 3.0)); // 输出7.0
    }
}

注意事项

  • @FunctionalInterface注解是可选的,但添加后编译器会自动校验接口是否符合函数式接口的规范(仅含一个抽象方法),避免后续误加方法导致问题。
  • 泛型参数T、U、V对应三个输入参数的类型,R对应返回值类型,可根据实际场景替换为具体类型(比如基本类型包装类、自定义对象等)。

方法二:嵌套现有接口(不推荐)

如果不想自定义接口,也可以通过嵌套BiFunction和Function来模拟三参数回调,但这种写法可读性较差,仅适合临时场景:

class Calculator {
    public static Double sumThree(Double num1, Double num2, Double num3) {
        return num1 + num2 + num3;
    }

    public static void main(String[] args) {
        // 第一层接收第一个参数,返回处理后两个参数的BiFunction
        Function<Double, BiFunction<Double, Double, Double>> nestedFunc = 
            num1 -> (num2, num3) -> sumThree(num1, num2, num3);
        
        // 分两次调用apply传入参数
        System.out.println(nestedFunc.apply(1.5).apply(2.5, 3.0)); // 输出7.0
    }
}

方法三:借助第三方库

部分第三方工具库(如Google Guava)提供了多参数函数式接口的实现,但如果只是简单需求,自定义接口是最轻量、最可控的方案,无需引入额外依赖。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 07:25:27