如何使用相同的重复代码块包围不同的代码块?

时间:2017-09-25 13:52:13

标签: java

例如:

public void foo(string something, Boolean flag, Object obj){
  try{
    if(flag){
       //some code
    }
 } catch(Exception e) {
     // handle exception
 }
}

public void doo(string something, Boolean flag){
  try{
    if(flag){
       //different code
    }
 } catch(Exception e) {
     // handle exception
 }
}

public void roo(string something, Boolean flag, Integer id){
  try{
    if(flag){
       //a bit of code
    }
 } catch(Exception e) {
     // handle exception
 }
}

我的问题是,有没有办法在每个函数中没有所有重复代码(例如try-catch块和ifs)?它会真正清理我的项目,并帮助我专注于重要的代码。

3 个答案:

答案 0 :(得分:4)

如何将Runnable传递给捕获异常的新方法?

public void foo(String something, Boolean flag, Object obj) {
    runSafe(something, flag, () => /*some code capturing obj*/);
}

public void doo(String something, Boolean flag) {
    runSafe(something, flag, () => /*different code*/);
}

public void roo(String something, Boolean flag, Integer id) {
    runSafe(something, flag, () => /*some code capturing id*/);
}

private void runSafe(string something, Boolean flag, Runnable r) {
    try {
        if (flag) {
            r.run();
        }
    } catch(Exception e) {
        // handle exception
    }
}

但是,传递一个表示是否执行代码的布尔值对我来说是错误的。为什么不使用这些方法的某种空对象实现(什么都不做)而不是传递false?

答案 1 :(得分:0)

您可以使用try-catch包围此方法的调用。如果每个Exception都需要一个唯一的响应,您可以创建一个扩展Exception的对象,或者只使用带有字符串消息的Exception构造函数。

答案 2 :(得分:0)

这可能不是您想听到的,但您可能需要考虑减少try / catch块。

https://softwareengineering.stackexchange.com/questions/145941/efficient-try-catch-block-usage