在Java中寻找“返回价值的消费者”抽象

Den*_*gin 8 java abstraction producer-consumer functional-interface

是否有针对消费者的内置或强大的第三方抽象在Java 8+中返回了价值?

PS对于延迟执行,它也可能返回Future

更新。 函数接口在语法上有完美的匹配,但是在语义方面存在一些考虑。在这种情况下使用Function显然会破坏不更改外部状态的合同。怎么处理呢?

Tre*_*onX 5

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

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

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

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

以下是一些最佳候选人:

  • 使用者:取一个参数,返回void。
  • 功能:采用一个参数,返回一个值。
  • 供应商:什么都不做,返回值。
  • 谓词:采用一个参数并返回布尔值。

及其各种派生。

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

编辑:因为Function不期望a 更改其执行的外部状态,所以某些API应用程序似乎很棘手。但是,如果您打算以这种方式使用函数,则可以定义一个参数类,该参数类基本上是所有希望更改的值的包装器。如果它们在执行期间发生任何更改,则基于这些更改来更新外部状态。但是,这似乎是一种模式,而不是简单的一类/接口语言功能。我在lambda表达式之前甚至在lambda表达式之前使用了参数类,并且如果正确地描述了正确的javadocs,它也可以很好地工作。