Java程序中異常的使用

  • 在Java中如何使用好Exception是門藝術(shù)。
  • 一般我們常見的有checked異常(Exception)和unchecked異常(RuntimeException),區(qū)別在于前者在語法層面強制開發(fā)者對異常進行處理,后者則不用。
  • 兩種異常的好壞或和使用方式大多還是根據(jù)場景而定。

一個現(xiàn)狀

  • 目前接手了一個項目,此項目定位為基礎(chǔ)組件,對外部系統(tǒng)提供REST API服務(wù)和對應(yīng)SDK。
  • 其中SDK的大致邏輯為:
//調(diào)用rest api
public Result submit(Object args){
  Result result;
  Request req = createRequest(args);  //構(gòu)造rest請求
  try{
    result = doRestRequest(req);    //請求http
  }
  catch(Exception e){
    result = new Result();
    result.code = -1;  //發(fā)生異常時設(shè)置結(jié)果碼為失敗
  }
  return result;
}
  • 邏輯上沒有問題,調(diào)用失敗的場景通過Result.code告訴給使用者。
  • 從現(xiàn)在分布式微服務(wù)應(yīng)用角度看,遠程調(diào)用發(fā)生錯誤應(yīng)該要被認為是一種常態(tài),開發(fā)者必須關(guān)心發(fā)生錯誤的場景。
  • 這樣的SDK封裝往往會讓使用方就會忽略錯誤的場景,直接提交本地事務(wù)完成請求,最終造成業(yè)務(wù)方與基礎(chǔ)組件中的數(shù)據(jù)狀態(tài)不一致。

改進

  • 這種問題發(fā)生太多次了,每次都得事后手動處理。所以在下個版本的SDK中,打算使用Exception進行改造。
//調(diào)用rest api
public Result submit(Object args) throws Exception{
  Request req = createRequest(args);  //構(gòu)造rest請求
  try{
    return doRestRequest(req);    //請求http
  }
  catch(Exception e){
    throw new Exception(e);    //此處可以對異常做一個封裝
  }
}
  • 這樣至少在代碼層面上提示使用方必須處理錯誤的場景,進行數(shù)據(jù)回滾和在界面上進行提示。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 178,765評論 25 709
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,506評論 19 139
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法,類相關(guān)的語法,內(nèi)部類的語法,繼承相關(guān)的語法,異常的語法,線程的語...
    子非魚_t_閱讀 34,625評論 18 399
  • Java異??刂茩C制又被稱為“違例控制機制”。捕獲程序錯誤最理想的時機是在編譯階段,這樣可以徹底避免錯誤的代碼運行...
    kelgon閱讀 4,594評論 2 50
  • 三毛女士說:“讀書多了,容顏自然改變,許多時候,自己可能以為許多看過的書籍都成過眼煙云,不復(fù)記憶,其實它們?nèi)允菨?..
    D051飛鷹閱讀 341評論 0 0

友情鏈接更多精彩內(nèi)容