gpt4 book ai didi

java - 使用可变参数计数的 FunctionalInterface 实现

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:18:22 24 4
gpt4 key购买 nike

在我的库中,我有一个简单的适配器接口(interface)可以注册。

Adapter firstAdapter = new FirstAdapter(String someParam);
Adapter secondAdapter = new SecondAdapter(int otherParam, String eventAnotherParam);
something.register(firstAdapter)
.register(secondAdapter);

适配器在构造函数中获取参数的地方。

我希望能够使用 FunctionalInterface 类型的适配器,但在这部分我不知道,有多少参数甚至是什么类型可能需要传递到 lambda 内部进行评估。

有什么办法可以解决这个问题吗?我希望能够做这样的事情:

something.register(firstAdapter)
.register(secondAdapter)
.register((String whatever, String whateverElse) -> whatever.equalsTo(whateverElse))
.register((int i) -> i>5);

编辑 {dsh}:

接口(interface)可能是这样的,但这并不重要,它只是抽象:

@FunctionalInterface
interface Adapter {
boolean test();
}

interface Something {
Something register(Adapter adapter);
}

最佳答案

在幕后,可变参数将是一个数组。

因此您可以将功能接口(interface)实现为:

@FunctionalInterface
public interface TestFunctionalInterface<T> {
public Boolean test(T... args);
}

然后像这样创建 lambda:

something.register(firstAdapter)
.register(secondAdapter)
.register((Integer[] x) -> (x[0] > 5))
//or
.register(x -> ((int) x[0] > 5)
//or
.register(x -> x[0].equals(x[1]);

请注意,我在这里没有列出每个 lambda 参数,而是将它们作为一个数组来引用。

当然,您可以将功能接口(interface)的输入/返回类型更改为更具体的内容,而不是使用泛型,如我的示例所示。

关于java - 使用可变参数计数的 FunctionalInterface 实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31990168/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com