有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

非顺序任务中的Java异常处理(模式/良好实践)

有些任务不应该并行完成(例如打开文件、读取、写入和关闭,这是有顺序的…)

但是。。。有些任务更像是购物清单,我的意思是他们可以有一个理想的订单,但这不是必须的。。例如通信或加载独立驱动程序等

对于这种任务, 我想知道管理异常的java最佳实践或模式

java的简单方法是:

 getUFO {
      try {
            loadSoundDriver();
            loadUsbDriver();
            loadAlienDetectorDriver();
            loadKeyboardDriver();    
  } catch (loadSoundDriverFailed) {
     doSomethingA;
  } catch (loadUsbDriverFailed) {
      doSomethingB;
  } catch (loadAlienDetectorDriverFailed) {
      doSomethingC;
  } catch (loadKeyboardDriverFailed) {
      doSomethingD;
  } 
}

但是,如果在其中一个动作中出现异常,但又想 尝试下一个吗

我曾想过这种方法,但似乎不适合用于异常 我不知道它是否有效,没关系,它真的很糟糕

getUFO {
       Exception ex=null;
 try {
       try{  loadSoundDriver();
       }catch (Exception e)  {  ex=e; }
       try{  loadUsbDriver();
       }catch (Exception e)  {  ex=e; }
       try{ loadAlienDetectorDriver();
       }catch (Exception e)  {  ex=e; }
       try{  loadKeyboardDriver()
       }catch (Exception e)  {  ex=e; }

       if(ex!=null)
       { throw ex;
        }
  } catch (loadSoundDriverFailed) {
     doSomethingA;
  } catch (loadUsbDriverFailed) {
      doSomethingB;
  } catch (loadAlienDetectorDriverFailed) {
      doSomethingC;
  } catch (loadKeyboardDriverFailed) {
      doSomethingD;
  } 
}

找到更好的练习似乎并不复杂。。我还是没有

谢谢你的建议


共 (1) 个答案

  1. # 1 楼答案

    试试这个:

    protected void loadDrivers() {
      loadSoundDriver();
      loadUsbDriver();
      loadAlienDetectorDriver();
      loadKeyboardDriver();    
    }
    

    然后:

    protected void loadSoundDriver() {
      try {
        // original code ...
      }
      catch( Exception e ) {
        soundDriverFailed( e );
      }
    }
    
    protected void soundDriverFailed( Exception e ) {
      log( e );
    }
    

    这给了子类一个改变行为的机会。例如,子类可以实现在单独的线程中加载每个驱动程序。主类不必关心驱动程序是如何加载的,主类的任何用户也不必关心