是否有用于消费者的内置或健壮的第三方抽象,可以在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,它效果很好。