定义方法被覆盖

时间:2019-07-09 12:22:57

标签: java

我有一个经常创建的方法,如下所示:

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 个答案:

答案 0 :(得分:5)

您不需要覆盖,您需要将处理程序传递给方法。您应该选择最适合您需求的功能界面。

如果处理程序不接受任何参数且不返回任何值,则它可以是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);

这是假设someHandlerMethodThatReturnsSomeObjectsomeOtherHandlerMethodThatReturnsSomeObject是没有参数并且返回SomeObject的静态方法。实际的调用可能会根据实现处理程序的实际逻辑的位置而改变。