在我的库中,我有一个简单的适配器接口来注册。
Adapter firstAdapter = new FirstAdapter(String someParam);
Adapter secondAdapter = new SecondAdapter(int otherParam, String eventAnotherParam);
something.register(firstAdapter)
.register(secondAdapter);
其中adapter在构造函数中获取参数。
我希望能够使用FunctionalInterface类型的适配器,但在这部分我不知道,有多少个参数甚至是什么类型可能需要通过lambda来评估
有什么方法可以解决这个问题吗?我希望能够做到这样的事情:
something.register(firstAdapter)
.register(secondAdapter)
.register((String whatever, String whateverElse) -> whatever.equalsTo(whateverElse))
.register((int i) -> i>5);
编辑{dsh}:
界面可能是这样的,但它并不重要,它只是抽象:
@FunctionalInterface
interface Adapter {
boolean test();
}
interface Something {
Something register(Adapter adapter);
}
答案 0 :(得分:2)
在幕后,varags将是一个阵列。
因此,您可以将功能接口实现为:
@FunctionalInterface
public interface TestFunctionalInterface<T> {
public Boolean test(T... args);
}
然后像这样创建lambdas:
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参数的每个,而是将它们称为数组。
当然,您可以将功能界面的输入/返回类型更改为更具体的内容,而不是使用Generics,如我的示例所示。