在 Java 中寻找"consumer that returns value"抽象



是否有用于消费者的内置或健壮的第三方抽象,可以在Java 8 ?

中返回值

p.s。对于延期执行,它也可以返回 future

更新。函数接口具有完美的句法匹配,但在语义上有一个考虑因素。在这种情况下,使用函数显然会破坏不要更改外部状态 合同。如何处理?

您可能正在寻找Function<T, R> -Interface。它是通用的,并在返回值时采用参数。它可用于lambda表达式,例如映射:

Integer input = 1;
Function<Integer, Integer> myMapping = a -> a * 2;
Integer myInt = myMapping.apply(input);
// myInt == 2

看一下java util.function包:https://docs.oracle.com/javase/8/docs/api/java/java/java/util/function/function/package-summary.html

有多种不同的预定义功能接口。@FunctionalInterface是标记这样的接口的注释,绝对只有一种非默认方法。这样的接口可用于lambda表达式。

这是一些顶级候选人:

  • 消费者:获取一个参数,返回void。
  • 函数:获取一个参数,返回一个值。
  • 供应商:一无所有,返回价值。
  • 谓词:获取一个参数并返回布尔值。

及其各种推导。

所有这些都可以作为"值"存储,以后执行。从某种意义上说,如果需要,它们可以成为回调。

编辑:由于不期望Function更改执行的外部状态,因此API的某些应用程序似乎很棘手。但是,如果您打算以这种方式使用函数,则可以定义一个参数类别,该类基本上是所有预期更改的值的包装器。如果在执行过程中更改了其中任何一个,则根据这些更改对外部状态进行更新。但是,这似乎更像是一种模式,而不是简单的单级/界面langauge功能。我以前甚至在lambda表达式之前都使用了参数类,并且如果正确描述了正确的Javadocs,它效果很好。

最新更新