-1

我有这个功能:

public void a(BooleanSupplier param){}

由函数 b 调用:

public void b(Boolean param){
   a(param)
}

问题是函数“a”期待 aBooleanSupplier但函数 b 正在发送一个布尔值。我想我应该将一个布尔值转换为一个BooleanSupplier,但我无法将一个转换为另一个。

4

1 回答 1

2

让我们仔细看看BooleanSupplier-interface。这是一个功能接口,即它只有一个抽象方法boolean getAsBoolean()。如我们所见,该方法没有参数并返回一个boolean.

现在让我们看一下提供的代码。方法b接收一个参数Boolean param。方法a接收一个类型的参数BooleanSupplier。我们如何将Boolean收到的 by转换b为 a BooleanSupplier?我们只需要创建一个在调用时返回的 lambda param。当写成 lambda 时,如下所示:

only expression in the lambda -> return-value
        ^
        |
() -> param;
 |
 v
empty parameter list

Boolean(type of param) 和boolean(expected return-type of )之间的次要类型不匹配BooleanSupplier通过自动装箱 ( oracle.com)解决。

所以总的来说,我们现在可以调用a如下:

a(() -> param);

有关 lambda 及其语法的更多信息,我建议阅读有关该主题的教程,例如来自oracle.com.

于 2021-12-23T15:33:54.683 回答