现代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
相关产品推荐
相关产品推荐

