使用变量count参数的FunctionalInterface实现

时间:2015-08-13 13:51:50

标签: java java-8

在我的库中,我有一个简单的适配器接口来注册。

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);
}

1 个答案:

答案 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,如我的示例所示。