当我遇到情况时,我正在与CompletableFutures
合作。让我们说我想在异步操作完成时做一些清理工作。以这种方式调用成员函数之间是否存在重要区别?为什么我会在第二个例子中选择第一个例子?
采取以下两个例子:
someAsyncOperation.apply(foo).whenComplete(MyClass::handleOperationCompletion);
对战:
someAsyncOperation.apply(foo).whenComplete((results, ex) -> handleOperationCompletion(results, ex));
从匿名函数调用静态函数,让我在本地范围内添加其他参数。在第二种情况下,我可以添加一个局部变量:
final Closeable object = new SomeCloseable();
someAsyncOperation.apply(foo).whenComplete((results, ex) -> handleOperationCompletion(results, ex, object));
我觉得如果我需要在某些对象上保持上下文来执行清理(例如关闭流),这可能会很有用,我仍然可以为它编写单元测试。我在这里失踪了吗?