Использование функций Anonymous Versus Member

Я работал с 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));

Я чувствую, что это может быть полезно, если мне нужно сохранить контекст для какого-либо объекта для выполнения очистки (например, закрыть поток), и я все еще могу написать для него модульные тесты. Есть ли компромисс, который мне здесь не хватает?


person Erracity    schedule 20.03.2017    source источник
comment
Похоже, вы спорите между методами-членами и статическими методами - какое это имеет отношение к анонимному классу? и да, статика плоха для тестирования.   -  person Nir Alfasi    schedule 20.03.2017
comment
Лямбда-функция = анонимная функция = (результаты, упр.) -> handleOperationCompletion(результаты, упр., объект) Я спорю между использованием этого шаблона или: MyClass::handleOperationCompletion Извинения. Если это не ясно, я попытаюсь обновить вопрос.   -  person Erracity    schedule 20.03.2017
comment
Смотрите дубликат для ответа прямо из уст лошади.   -  person Kayaman    schedule 20.03.2017
comment
Внутри whenComplete вы вызываете handleOperationCompletion один раз как статический метод, а другой вариант — как метод-член. Тот факт, что он обернут лямбдой, - это просто техническая деталь, но я не вижу, как это на что-то влияет. Итак, в конце концов, похоже, вы спорите о том, сделать ли метод статическим или нет...   -  person Nir Alfasi    schedule 20.03.2017