自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

如何優(yōu)雅的實(shí)現(xiàn)try/catch異常塊?

開(kāi)發(fā) 后端
繁瑣的try{}caht嵌套在代碼里,看著很不舒服,這里我們不討論性能,就代碼來(lái)講,來(lái)看看如何將他隱藏起來(lái)。原理是不變的。變得是寫(xiě)法。下面我們來(lái)看如何優(yōu)雅的處理異常塊。

在項(xiàng)目中,我們會(huì)遇到異常處理,對(duì)于運(yùn)行時(shí)異常,需要我們自己判斷處理。對(duì)于受檢異常,需要我們主動(dòng)處理。

但是繁瑣的try{}caht嵌套在代碼里,看著很不舒服,這里我們不討論性能,就代碼來(lái)講,來(lái)看看如何將他隱藏起來(lái)。原理是不變的。變得是寫(xiě)法。下面我們來(lái)看如何優(yōu)雅的處理異常塊。

在這之前。你需要知道以下幾個(gè)概念:

  •  行為參數(shù)化:

是java8提出的,函數(shù)式編程的一種思想,通過(guò)把代碼包裝為參數(shù)傳遞行為,即把代碼邏輯包裝為一個(gè)參數(shù),傳到方法里。

  •  Lambda表達(dá)式:

java8提出:Lambda表達(dá)式理解為簡(jiǎn)潔的表示可傳遞的匿名函數(shù)的一種方式,它沒(méi)有名稱,但它有函數(shù)體,參數(shù)列表,返回類型。可以拋出一個(gè)異常類型。包裝代碼邏輯為參數(shù)即使用Lambda表達(dá)式。

  •  函數(shù)式接口:

本質(zhì)上是只有一個(gè)抽象方法的普通接口,可以被隱式的轉(zhuǎn)換為L(zhǎng)ambda表達(dá)式,需要用注解定義(@FunctionalInterface)。默認(rèn)方法和靜態(tài)方法可以不屬于抽象方法,可以在函數(shù)式接口中定義。

如果函數(shù)式接口中額外定義多個(gè)抽象方法,那么這些抽象方法簽名必須和Object的public方法一樣,接口最終有確定的類實(shí)現(xiàn), 而類的最終父類是Object。因此函數(shù)式接口可以定義Object的public方法。

這句代碼想來(lái)小伙伴都不陌生。這是一個(gè)受檢異常,需要拋出一個(gè)ClassNotFoundException。

正常的寫(xiě)法:

嗯,我們來(lái)看具體的實(shí)現(xiàn):很簡(jiǎn)單,我們要做的,即把Class<?> clazz = Class.forName("類名");當(dāng)做一種行為去處理,接受一個(gè)String ,得到一個(gè)Class,所以我們要定義一個(gè)函數(shù)接口,描述這種行為。

這里,因?yàn)槲覀兊男袨樾枰獟伋霎惓?。所以在接口里也拋出異?!?/p>

然后,我們需要定義一個(gè)方法,將我們的行為作為參數(shù)傳進(jìn)去,同時(shí),捕獲一下我們的異常。

然后,我們可以調(diào)用我們的方法classFind方法,

當(dāng)然。其實(shí)這種思想并不簡(jiǎn)單的可以做捕獲異常的處理,

我們來(lái)看一個(gè)Demo->文本文件轉(zhuǎn)換為字符串:

在我看來(lái);將文本文件轉(zhuǎn)換為字符串,我們需要使用高級(jí)流包裝低級(jí)流,然后做緩存讀出來(lái)。這里,我們不可避免的會(huì)遇到異常處理,流的關(guān)閉等操作,下面我們將這些代碼都異常起來(lái)。專心寫(xiě)讀的邏輯即可。

我的思路:

我對(duì)java IO用的不是很熟,大家有好的方法請(qǐng)留言,相互學(xué)習(xí): 

  1. FileInputStream fileInputStream = new FileInputStream(file))  
  2. InputStreamReader inputStreamReader = new InputStreamReader(fileInputStream))  
  3. BufferedReader bufferedReader = new BufferedReader(inputStreamReader)) 
  4. String str = bufferedReader.readLine() 

字節(jié)流-》字符流-》字符緩存流 即 將字節(jié)流轉(zhuǎn)換為字符流之后在用高級(jí)流包裝。

所以我的思路是避免在邏輯里出現(xiàn)太多的IO流關(guān)閉,和異常捕獲,專心處理讀取邏輯即可,結(jié)合以下兩種技術(shù):

  •  try(){}【自動(dòng)關(guān)閉流,1.7支持】
  •  lambda特性來(lái)實(shí)現(xiàn)【行為參數(shù)化,1.8】

執(zhí)一個(gè)行為,任何BufferReader -> String的Lambda表達(dá)式都可以作為參數(shù)傳入。只要符合peocess方法的簽名即可。

執(zhí)行

 

 

責(zé)任編輯:龐桂玉 來(lái)源: Java知音
相關(guān)推薦

2023-11-13 17:01:26

C++編程

2020-09-27 07:48:40

不用try catch

2024-11-04 08:20:00

try-catch編程

2024-05-10 11:43:23

C#編程

2024-05-07 07:58:47

C#程序類型

2009-07-21 14:30:38

Scalatry-catch

2023-10-27 08:20:12

springboot微服務(wù)

2021-01-13 09:55:29

try-catch-fJava代碼

2023-10-10 13:23:18

空指針異常Java

2024-06-25 10:37:11

2024-05-24 08:59:15

2009-12-03 10:49:32

PHP自定義異常處理器

2009-12-02 19:56:33

PHP中try{}ca

2019-01-24 16:11:19

前端全局異常數(shù)據(jù)校驗(yàn)

2024-02-27 10:48:16

C++代碼開(kāi)發(fā)

2023-09-07 07:53:21

JavaScriptGoRust

2021-03-31 11:52:24

try-catch-fJava代碼

2021-09-26 09:40:25

React代碼前端

2020-08-26 07:17:19

通信

2017-11-02 15:26:10

JavaScriptasync錯(cuò)誤
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)