Kotlin实战指南十九:use 函数魔法
生活随笔
收集整理的這篇文章主要介紹了
Kotlin实战指南十九:use 函数魔法
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
轉(zhuǎn)載請標(biāo)明出處:http://blog.csdn.net/zhaoyanjun6/article/details/117366756
本文出自【趙彥軍的博客】
文章目錄
- 往期精彩文章
- use函數(shù)
往期精彩文章
Kotlin實戰(zhàn)指南十八:open、internal 關(guān)鍵字使用
Kotlin實戰(zhàn)指南十七:JvmField、JvmStatic使用
Kotlin實戰(zhàn)指南十六:Synchronized、Volatile
本文章轉(zhuǎn)載于:Kotlin use函數(shù)的魔法
use函數(shù)
- 實現(xiàn)了Closeable接口的對象可調(diào)用use函數(shù)
- use函數(shù)會自動關(guān)閉調(diào)用者(無論中間是否出現(xiàn)異常)
在這里插入圖片描述
- 可以看出,use 函數(shù)內(nèi)部實現(xiàn)也是通過 try-catch-finally 塊捕捉的方式,所以不用擔(dān)心會有異常拋出導(dǎo)致程序退出
- close 操作在finally里面執(zhí)行,所以無論是正常結(jié)束還是出現(xiàn)異常,都能正確關(guān)閉調(diào)用者
下面我們就對比一下 Java 和 Kotlin 實現(xiàn)的不同
Java 版本
//Java 實現(xiàn) FileInputStream fis = null; DataInputStream dis = null; try {fis = new FileInputStream("/home/test.txt");dis = new DataInputStream(new BufferedInputStream(fis));String lines = "";while((lines = dis.readLine()) != null){System.out.println(lines);} } catch (IOException e){e.printStackTrace(); } finally {try {if(dis != null)dis.close();} catch (IOException e) {e.printStackTrace();}try {if(fis != null)fis.close();} catch (IOException e) {e.printStackTrace();} }Kotlin 版本
File("/home/test.txt").readLines().forEach { println(it) }對 Kotlin 就是可以兩行實現(xiàn)。
仔細(xì)翻閱 readLines 這個擴(kuò)展函數(shù)的實現(xiàn)你會發(fā)現(xiàn),它也是間接調(diào)用 use,這樣就省去了捕捉異常和關(guān)閉的煩惱
同樣的,經(jīng)過包裝以后你只需要關(guān)注讀出來的數(shù)據(jù)本身而不需要 care 各種異常情況
- File的一些其它有用的擴(kuò)展函數(shù)
上面的函數(shù)都是基于use實現(xiàn)的,可以放心使用,而不用擔(dān)心異常的發(fā)生,并且會自動關(guān)閉IO流
總結(jié)
以上是生活随笔為你收集整理的Kotlin实战指南十九:use 函数魔法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Kotlin实战指南十八:open、in
- 下一篇: Kotlin实战指南二十:flow