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

如何实现可接收任意数量函数的递归链式泛型方法?

如何让Java的chain方法支持任意数量的函数参数?

我希望能写出这样的调用代码:

var output = chain(
        0,
        n -> n + "hi",
        n -> n,
        n -> n + 1,
        n -> n.equals("0hi1")
);

现在需要解决的问题是:如何让chain方法支持接收任意数量的函数参数?

目前我能通过定义固定数量泛型参数的方法实现,但这种方式对传入的函数数量有严格限制,无法灵活扩展:

public static <A, B, C, D, E> E chain(
        A val,
        Function<? super A, ? extends B> f1,
        Function<? super B, ? extends C> f2,
        Function<? super C, ? extends D> f3,
        Function<? super D, ? extends E> f4
) {
    return f4.apply(f3.apply(f2.apply(f1.apply(val))));
}

我考虑过用递归结合可变参数的方式实现,大致思路如下,但还需要完善泛型类型的处理:

public static OutputType chain(
        InputType val,
        Function<?, ?>... functions
) {
    var nextInput = functions[0].apply(val);
    if (functions.length == 1) return nextInput;
    var tail = Arrays.copyOfRange(functions, 1, functions.length);
    return chain(nextInput, tail);
}

另外我知道可以通过Optional、Stream这类Monad实现链式转换,示例代码如下:

var output = Optional
        .of(0)
        .map(n -> n + "hi")
        .map(n -> n)
        .map(n -> n + 1)
        .map(n -> n.equals("0hi1"))
        .get();

但我明确不想采用这类方案,希望保持最开始的chain(val, func1, func2, ...)这种调用风格。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 15:22:28