我有与3种方法相同的if() { try { < SOME CODE > } finally { } } else {}
块。
每种方法唯一不同的是。
我可以使用任何编码模式来“干燥”我的代码吗?理想情况下,希望将if() { try { } finally { } } else {}
提取到某些通用结构并将传递给它。用Java有可能吗?
谢谢
最佳答案
您可以引入一种通用方法来排除通用部分。
然后根据您的要求可以执行以下操作:
1)如果这3种方法属于同一类:提取3种特定方法中try
主体的每个语句集,并将此方法作为通用方法中的Runnable
参数传递。
例如 :
public void commonMethod(Runnable methodToInvoke){
if() {
try { methodToInvoke.run() } finally { }
}
else {}
}
并通过传递3个提取的方法进行调用:
commonMethod(this::methodFoo);
commonMethod(this::methodBar);
commonMethod(this::methodFooBar);
2)如果这三个方法在不同的类中:引入一个将由这三个类实现的接口,并使通用方法接受该接口的参数。
例如,引入了
Processing
接口:public void commonMethod(Processing processing){
if() {
try { processing.doThat() } finally { }
}
else {}
}
并通过传递
Processing
接口的3个实现来调用它:commonMethod(foo);
commonMethod(bar);
commonMethod(fooBar);