【问题标题】:Convert from Boolean to BooleanSupplier从 Boolean 转换为 BooleanSupplier
【发布时间】:2022-01-24 13:32:45
【问题描述】:

我有这个功能:

public void a(BooleanSupplier param){}

由函数 b 调用:

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

问题是函数“a”需要BooleanSupplier,但函数b 发送的是布尔值。我想我应该将布尔值转换为 BooleanSupplier,但我无法将一个转换为另一个。

【问题讨论】:

  • a(() -> param); 应该可以解决问题。
  • 谢谢@Turing85。你能解释一下这个解决方案吗? :)
  • 我投了反对票,因为No research
  • 这是BooleanSupplier-interface 的一个非常直接的 lambda 实现。 BooleanSupplier 是一个没有参数的方法,返回一个Boolean。有关 lambda 语法的详细信息,我建议阅读有关该主题的教程,例如this one from oracle.com.
  • 谢谢!我实际上试图阅读 javadoc,但由于我在函数“a”上有一个可选的 BooleanSupplier,所以这个构造 a(()->param) 不起作用,我认为这是我调用它的方式,但现在我可以确认这实际上是我认为的可选问题。再次感谢 Turing85,我会做教程的!

标签: java java-8 functional-programming supplier


【解决方案1】:

让我们仔细看看BooleanSupplier-interface。这是一个函数式接口,即它只有一个抽象方法boolean getAsBoolean()。可以看到,该方法没有参数,返回一个boolean

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

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

Booleanparam 的类型)和 booleanBooleanSupplier 的预期返回类型)之间的次要类型不匹配通过 autoboxing (oracle.com) 解决。

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

a(() -> param);

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

【讨论】:

  • 很好的答案和教程,我正在看它!我还有一个问题(也许是教程上的答案,idk,因为我还没有完成它)。如果 param 是 Boolean 并且我可以执行 a(()->param) 为什么我不能执行 a(()->Boolean.FALSE)?
  • 哦,这很奇怪!我有“variable_one”,这是一个可选的,我试图有一个(variable_one.orElseGet(()->Boolean.FALSE).getAsBoolean()) 并且它不起作用^^',那么也许是另一回事。谢谢你:)
  • 当然不用参考Boolean.FALSE。您可以简单地使用()->false。对于已经存在的Boolean 对象,也可以使用a(param::booleanValue)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-20
  • 1970-01-01
  • 1970-01-01
  • 2021-06-05
  • 1970-01-01
相关资源
最近更新 更多