Java常见的Try / Finally块围绕不同的代码块-代码样式

时间:2018-10-12 17:12:43

标签: java code-standards

我有3种方法中使用的 same if() { try { < SOME CODE > } finally { } } else {}块。

每种方法唯一不同的地方是

我可以使用任何编码模式来“干燥”我的代码吗?理想情况下,希望将if() { try { } finally { } } else {}提取到某个通用结构并将传递给它。用Java可以做到吗?

谢谢

1 个答案:

答案 0 :(得分:1)

您可以引入一种通用方法来分解出通用部分。

然后根据您的要求可以执行以下操作:

1)如果这3种方法属于同一类:用3种特定方法提取try主体的每条语句集,并在普通方法中将此方法作为Runnable参数传递。 br /> 例如:

public void commonMethod(Runnable methodToInvoke){

     if() {
            try { methodToInvoke.run() } finally { } 
     } 
     else {}
}

并通过传递3个提取的方法进行调用:

commonMethod(this::methodFoo);
commonMethod(this::methodBar);
commonMethod(this::methodFooBar);

2)如果3个方法位于不同的类中:引入3个类将实现的接口,并使通用方法接受该接口的参数。

例如,引入了Processing接口:

public void commonMethod(Processing processing){

     if() {
            try { processing.doThat() } finally { } 
     } 
     else {}
}

并通过传递Processing接口的3个实现来调用它:

commonMethod(foo);
commonMethod(bar);
commonMethod(fooBar);