Java:用Lambda表達式簡化代碼一例

来源:http://www.cnblogs.com/BillySir/archive/2017/09/08/7494090.html
-Advertisement-
Play Games

之前,調用第3方服務,每個方法都差不多“長”這樣, 寫起來啰嗦, 改起來麻煩, 還容易改漏。 我經過學習和提取封裝, 將try ... catch ... catch .. 提取為公用, 得到這2個方法: 現在用起來是如此簡潔。像這種無返回值的: 還有這種有返回值的: 這是我的第一篇Java文章。學 ...


  之前,調用第3方服務,每個方法都差不多“長”這樣, 寫起來啰嗦, 改起來麻煩, 還容易改漏。

public void authorizeRoleToUser(Long userId, List<Long> roleIds) {
    try {
        power.authorizeRoleToUser(userId, roleIds);
    } catch (MotanCustomException ex) {
        if (ex.getCode().equals(MSUserException.notLogin().getCode()))
            throw UserException.notLogin();
        if (ex.getCode().equals(MSPowerException.haveNoPower().getCode()))
            throw PowerException.haveNoPower();
        throw ex;
    } catch (MotanServiceException ex) {
        CatHelper.logEventService("Power-authorizeRoleToUser", "authorizeRoleToUser", ex.getStatus(),
                ex.getErrorCode(), ex.getMessage());
        throw ex;
    } catch (MotanAbstractException ex) {
        CatHelper.logEventService("Power-authorizeRoleToUser", "authorizeRoleToUser", ex.getStatus(),
                ex.getErrorCode(), ex.getMessage());
        throw ex;
    } catch (Exception ex) {
        CatHelper.logError(ex);
        throw ex;
    }
}

  我經過學習和提取封裝, 將try ... catch ... catch .. 提取為公用, 得到這2個方法:

import java.util.function.Supplier;

public static <T> T tryCatch(Supplier<T> supplier, String serviceName, String methodName) {
    try {
        return supplier.get();
    } catch (MotanCustomException ex) {
        if (ex.getCode().equals(MSUserException.notLogin().getCode()))
            throw UserException.notLogin();
        if (ex.getCode().equals(MSPowerException.haveNoPower().getCode()))
            throw PowerException.haveNoPower();
        throw ex;
    } catch (MotanServiceException ex) {
        CatHelper.logEventService(serviceName + "-" + methodName, methodName, ex.getStatus(), ex.getErrorCode(),
                ex.getMessage());
        throw ex;
    } catch (MotanAbstractException ex) {
        CatHelper.logEventService(serviceName + "-" + methodName, methodName, ex.getStatus(), ex.getErrorCode(),
                ex.getMessage());
        throw ex;
    } catch (Exception ex) {
        CatHelper.logError(ex);
        throw ex;
    }
}

public static void tryCatch(Runnable runnable, String serviceName, String methodName) {
    tryCatch(() -> {
        runnable.run();
        return null;
    }, serviceName, methodName);
}

  現在用起來是如此簡潔。像這種無返回值的:

public void authorizeRoleToUser(Long userId, List<Long> roleIds) {
    tryCatch(() -> { power.authorizeRoleToUser(userId, roleIds); }, "Power", "authorizeRoleToUser");
}

  還有這種有返回值的:

public List<RoleDTO> listRoleByUser(Long userId) {
    return tryCatch(() -> power.listRoleByUser(userId), "Power", "listRoleByUser");
}

  這是我的第一篇Java文章。學習Java的過程中,既有驚喜,也有失望。以後會繼續來分享心得。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • ``` def test(a, b, c=3): print(locals()) # 混用兩種,確保順序命名在前 test(c = 30, 1, 2) SyntaxError: positional argument follows keyword argument ``` ...
  • 每次我發佈軟體工程師的崗位工作要求 ,各種求職申請就會紛至沓來,接踵而至 。但每每讓我困惑的是, 似乎總有那麼幾位應聘者完全不明白所謂“編程”的意思。 當然,他們另有想法。 而我認為,如果你應聘的是“Web 前端開發”崗位,那麼你只懂jQuery也可以勝任,那麼,“軟體工程師”是不是就意味著會HTM ...
  • 想了半天,發現單獨的封裝和多態沒什麼好講的,我們就簡單說說Java裡面對應的語法吧。 相關內容如下: 一、訪問修飾符 二、getter/setter方法 三、構造方法 四、super和this 五、static關鍵字 六、final關鍵字 七、方法重寫 八、抽象類和介面 一、訪問修飾符 Java當中 ...
  • 其實本來真的沒打算寫這篇文章,主要是我得記憶力不是很好,不像一些記憶力強的人,面試完以後,幾乎能把自己和麵試官的對話都給記下來。我自己當初面試完以後,除了記住一些聊過的知識點以外,具體的內容基本上忘得一干二凈,所以寫這篇文章其實是很有難度的。 但是,最近問我的人實在是太多了,為了避免重覆回答,給自己 ...
  • 原文出處:http://hi.baidu.com/eduask%C9%BD%C8%AA/blog/item/227bf4d81c71ebf538012f53.html 這是什麼原因呢? 1。java在編譯的時候 Integer a = 100; 被翻譯成-> Integer a = Integer. ...
  • thrift初識 c++服務端和python客戶端 thrift作為一個跨語言的服務部署框架,目前的應用非常廣泛。 這裡通過thrift實現一個簡單的echo服務來加深對其的理解和印象。入門學習thrift強烈推薦官方文檔 "thrift study" 整個echo服務分為兩個很簡單的部分,服務端和 ...
  • .常用Git命令清單 一、新建代碼庫 #在當前目錄創建一個Git代碼庫 $ git init #新建一個目錄,將其初始化為Git代碼庫 $ git init [project name] #下載一個項目和它的整個代碼歷史 $ git clone [url] 二、配置 Git的設置未見為.gitcon ...
  • media 靜態文件配置 static 靜態文件多用於存放用於渲染前端頁面的相關數據,media用於存放客戶上傳或其他的文件 setting.py 中加入路徑 urls.py 中加入路由分配: 這樣上傳在django的文件都可以在前端調用: 全局變數: 將全局變數存入setting.py,如 FUN ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...