如何優雅的實現 try catch 異常塊?

來源:小明的學習筆記博客

地址:www.cnblogs.com/liruilong/p/13403963.htmlhtml

在項目中,咱們會遇到異常處理,對於運行時異常,須要咱們本身判斷處理。對於受檢異常,須要咱們主動處理。java

可是繁瑣的try{}catch嵌套在代碼裏,看着很不舒服,這裏咱們不討論性能,就代碼來說,來看看如何將他隱藏起來。原理是不變的。變得是寫法。下面咱們來看如何優雅的處理異常塊。面試

在這以前。你須要知道如下幾個概念:編程

  • 行爲參數化:
  • 是java8提出的,函數式編程的一種思想,經過把代碼包裝爲參數傳遞行爲,即把代碼邏輯包裝爲一個參數,傳到方法裏,Java8系列新特性教程能夠關注公衆號Java技術棧搜索閱讀。
  • Lambda表達式:
  • java8提出:Lambda表達式理解爲簡潔的表示可傳遞的匿名函數的一種方式,它沒有名稱,但它有函數體,參數列表,返回類型。能夠拋出一個異常類型。包裝代碼邏輯爲參數即便用Lambda表達式。
  • 函數式接口:
  • 本質上是隻有一個抽象方法的普通接口,能夠被隱式的轉換爲Lambda表達式,須要用註解定義(@FunctionalInterface)。默認方法和靜態方法能夠不屬於抽象方法,能夠在函數式接口中定義。

若是函數式接口中額外定義多個抽象方法,那麼這些抽象方法簽名必須和Object的public方法同樣,接口最終有肯定的類實現, 而類的最終父類是Object。所以函數式接口能夠定義Object的public方法。後端

這句代碼想來小夥伴都不陌生。這是一個受檢異常,須要拋出一個ClassNotFoundException。緩存

正常的寫法:多線程

嗯,咱們來看具體的實現:很簡單,咱們要作的,即把`Class<?> clazz = Class.forName("類名");`當作一種行爲去處理,接受一個String ,獲得一個Class,因此咱們要定義一個函數接口,描述這種行爲。架構

這裏,由於咱們的行爲須要拋出異常。因此在接口裏也拋出異常。關於異常的最佳處理這裏不介紹了,詳細看下這篇《Java 編程中關於異常處理的 10 個最佳實踐》。函數式編程

而後,咱們須要定義一個方法,將咱們的行爲做爲參數傳進去,同時,捕獲一下咱們的異常。函數

而後,咱們能夠調用咱們的方法classFind方法,

固然。其實這種思想並不簡單的能夠作捕獲異常的處理,

咱們來看一個Demo->文本文件轉換爲字符串:

在我看來;將文本文件轉換爲字符串,咱們須要使用高級流包裝低級流,而後作緩存讀出來。這裏,咱們不可避免的會遇到異常處理,流的關閉等操做,下面咱們將這些代碼都異常起來。專心寫讀的邏輯便可。

個人思路:

我對java IO用的不是很熟,你們有好的方法請留言,相互學習:

FileInputStream fileInputStream = new FileInputStream(file))

InputStreamReader inputStreamReader = new InputStreamReader(fileInputStream))

BufferedReader bufferedReader = new BufferedReader(inputStreamReader))

String str = bufferedReader.readLine()

字節流-》字符流-》字符緩存流 即 將字節流轉換爲字符流以後在用高級流包裝。

因此個人思路是避免在邏輯裏出現太多的IO流關閉,和異常捕獲,專心處理讀取邏輯便可,結合如下兩種技術:

執一個行爲,任何BufferReader -> String的Lambda表達式均可以做爲參數傳入。只要符合peocess方法的簽名便可。

執行

加油,願被這世界溫柔以待 ^_^

推薦去個人博客閱讀更多:

1.Java JVM、集合、多線程、新特性系列教程

2.Spring MVC、Spring Boot、Spring Cloud 系列教程

3.Maven、Git、Eclipse、Intellij IDEA 系列工具教程

4.Java、後端、架構、阿里巴巴等大廠最新面試題

以爲不錯,別忘了點贊+轉發哦!

相關文章
相關標籤/搜索