Java common Try/Finally block around different code blocks - 代码风格
Java common Try/Finally block around different code blocks - code style
我有在 3 种方法中使用的 same if() { try { < SOME CODE > } finally { } } else {}
块。
每种方法唯一不同的是<一些代码>。
是否有任何编码模式可用于 "DRY" 我的代码?理想情况下希望将 if() { try { } finally { } } else {}
提取到一些通用结构并将 传递给它。在 Java 中可能吗?
谢谢
你可以引入一个公共的方法来提取公共部分。
然后根据你的要求你可以这样做:
1)如果3个方法在同一个class中:提取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) 如果这 3 个方法是不同的 classes :引入一个接口,这 3 个 classes 将实现并使通用方法接受该接口的参数。
例如引入了一个Processing
界面:
public void commonMethod(Processing processing){
if() {
try { processing.doThat() } finally { }
}
else {}
}
并通过传递 Processing
接口的 3 个实现来调用它:
commonMethod(foo);
commonMethod(bar);
commonMethod(fooBar);
我有在 3 种方法中使用的 same if() { try { < SOME CODE > } finally { } } else {}
块。
每种方法唯一不同的是<一些代码>。
是否有任何编码模式可用于 "DRY" 我的代码?理想情况下希望将 if() { try { } finally { } } else {}
提取到一些通用结构并将
谢谢
你可以引入一个公共的方法来提取公共部分。
然后根据你的要求你可以这样做:
1)如果3个方法在同一个class中:提取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) 如果这 3 个方法是不同的 classes :引入一个接口,这 3 个 classes 将实现并使通用方法接受该接口的参数。
例如引入了一个Processing
界面:
public void commonMethod(Processing processing){
if() {
try { processing.doThat() } finally { }
}
else {}
}
并通过传递 Processing
接口的 3 个实现来调用它:
commonMethod(foo);
commonMethod(bar);
commonMethod(fooBar);