我有一个经常创建的方法,如下所示:
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
}
}
我注意到,每次创建端点时,我都在复制完全相同的方法。每个端点之间唯一的区别是调用的特定处理程序。
从基本的意义上讲,我只想定义一次此方法,将其覆盖以更改要调用的处理程序名称,而其他所有内容均保持不变。
这可能吗?
答案 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);
这是假设someHandlerMethodThatReturnsSomeObject
和someOtherHandlerMethodThatReturnsSomeObject
是没有参数并且返回SomeObject
的静态方法。实际的调用可能会根据实现处理程序的实际逻辑的位置而改变。