我有一个像这样经常创建的方法:
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);
这是假设 someHandlerMethodThatReturnsSomeObject
和 someOtherHandlerMethodThatReturnsSomeObject
是没有参数并返回 SomeObject
的静态方法.实际调用可能会发生变化,具体取决于处理程序的实际逻辑在何处实现。
关于java - 定义要覆盖的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56952513/