java - 定义要覆盖的方法

标签 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
  }
}

我注意到每次创建端点时我都在复制这个完全相同的方法。每个端点之间的唯一区别是调用的特定处理程序。

在基本术语中,我希望能够只定义此方法一次,覆盖它以更改调用的处理程序名称,而其他所有内容保持不变。

这可能吗?

最佳答案

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

如果处理程序不接受任何参数且不返回任何值,它可以是一个 Runnable .

如果它确实产生一个值(SomeObject?),它可以是一个Supplier<SomeObject>。 .

然后你可以写一个static调用所选功能接口(interface)方法的方法。

例如:

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 的静态方法.实际调用可能会发生变化,具体取决于处理程序的实际逻辑在何处实现。

关于java - 定义要覆盖的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56952513/

相关文章:

java - 如何通过按另一个 jframe 中的按钮将 jframe 中的文本字段设置为 setEditable(true)?

java正则表达式 key : value multiple lines

java - 将时间字符串解析为日历时出错

java - 在 Android 7 org.apache.http (Apache HttpClient 4.0) 中启用已弃用的密码套件后主机名不匹配

java - RxJava : Reading multiple subscriptions and performing an action based on their results?

java - 关于java线程生命周期

java - 将对象转换为 Java 中的自定义 DTO 列表

java - 在 .NET 中运行 Java、Python、Ruby 和 Perl 程序

java - 如何检查方法是否使用反射声明?

java - Spring Security Rest 基本身份验证