在我的库中,我有一个简单的适配器接口(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/