感觉以函数接口作为接口参数, 接收 Lambda 表达式的方式, 有点像是对于多态的补充.
比如我用接口作为方法参数时, 可以传递这个接口的各种引用, 在方法内部大多数情况并不关心其真实类型. 这是多态.
---------------------------------------
而用 Lambda 表达式传递给接口方法的函数接口参数时, 方法内部甚至只需要约束其参数个数. 例如:
wxSpAllocationService.allocationReturn(allocationReturnRequest, this::allocationReturned, this::allocationReturnFailed);
wxSpAllocationService.allocationReturn(allocationReturnRequest, this::allocationReturned, this::allocationReturnFailed);
对于以上这两次调用, 在 allocationReturn 方法内部逻辑里:
ApiResult<AllocationReturnResponse> allocationReturn(AllocationReturnRequest dto,
Consumer<AllocationReturnRequest> callback,
BiConsumer<AllocationReturnRequest, String> failedCallback) {
...
if (apiResult.isSuccess()) {
callback.accept(dto);
} else {
failedCallback.accept(dto, apiResult.getDetail());
}
return apiResult;
}
相比于利用多态的接口设计来说, 函数接口的接口设计, 参数层面只要参数个数匹配, 就可以传递.