在Java中声明lambda表达式数组

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (14)

我想创建一个lambda数组。问题在于lambda可能彼此不同。例:

private interface I0 {
    int interface0(int a, int b);
}

private interface I1 {
    int interface1(double d);
}

现在,我该如何声明一个包含I0和I1的列表?

List<Object> test = Arrays.asList(
        (int a, int b) -> a + b,
        (double d) -> d * 2
);

显然Object不起作用。

提问于
用户回答回答于

您可以投射到相应的界面,如:

List<Object> test = Arrays.asList(
    (I0) (int a, int b) -> a + b,
    (I1) (double d) -> (int) (d * 2)
);

尽管这个比较短,但我也会认为Eran的答案也许更易于理解(如果有更多的功能)。而且我也看不到这样一个构造的用例......

它变得更短(不一定更好):

List<Object> test = Arrays.asList(
    (I0) (a, b) -> a + b,
    (I1) d -> (int) (d * 2)
);
用户回答回答于

您必须首先将lambda表达式分配给功能接口类型的变量。

否则,编译器无法推断出这些lambda表达式的类型。

I0 i0 = (int a, int b) -> a + b;
I1 i1 = (double d) -> (int) (d * 2);
List<Object> test = Arrays.asList(
    i0,
    i1
);

这就是说,我不确定在a中存储这些lambda表达式有什么意义List<Object>。如果不将它们转换回各个功能接口类型,则不能使用它们。

扫码关注云+社区