Определение метода для переопределения - PullRequest
3 голосов
/ 09 июля 2019

У меня есть метод, который я часто создаю, например:

public static SomeObject example () {
  // Create instance of Debug Log class
  // Log first entry
  try {
     // Call specific handler relating to this endpoint
  } catch (Exception e) {
    // Other generic calls
  }
}

Я заметил, что я повторяю этот же метод каждый раз, когда создаю конечную точку. Единственная разница между каждой конечной точкой - это конкретный вызываемый обработчик.

В основных терминах я хотел бы иметь возможность определить этот метод только один раз, переопределив его, чтобы изменить имя обработчика, которое вызывается, а все остальное остается прежним.

Возможно ли это?

1 Ответ

5 голосов
/ 09 июля 2019

Вам не нужно переопределять, вам нужно передать обработчик методу.Вы должны выбрать функциональный интерфейс, который наилучшим образом соответствует вашим потребностям.

Если обработчик не принимает аргументов и не возвращает значения, это может быть Runnable.

Если он действительно выдает значение (SomeObject?), Это может быть Supplier<SomeObject>.

Тогда вы можете написать один static метод, который вызывает метод выбранного функционального интерфейса.

Например:

public static SomeObject example (Supplier<SomeObject> handler) {
  // Create instance of Debug Log class
  // Log first entry
  try {
     return handler.get();
  } catch (Exception e) {
    // Other generic calls
  }

  // you might need some return statement here too
}

Чтобы выполнить этот метод, вы можете передать ему ссылку на метод, который возвращает SomeObject.

Например:

SomeObject result1 = example(SomeClass::someHandlerMethodThatReturnsSomeObject);
SomeObject result2 = example(SomeOtherClass::someOtherHandlerMethodThatReturnsSomeObject);

Это предполагает someHandlerMethodThatReturnsSomeObject и someOtherHandlerMethodThatReturnsSomeObject являются статическими методами, которые не имеют аргументов и возвращают SomeObject.Фактические вызовы могут меняться в зависимости от того, где реализована фактическая логика ваших обработчиков.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...