簡體   English   中英

Kotlin中使用function有什么意義

[英]What's the point of the use function in Kotlin

我正在嘗試使用內聯 function use FileInputStream 而不是經典的 try/catch IOException 以便

try {
    val is = FileInputStream(file) 
    // file handling...
}
catch (e: IOException) {
    e.printStackTrace()
}

變成

FileInputStream(file).use { fis ->
    // do stuff with file
}

我的問題是,如果 function 仍然拋出異常,為什么還要use它? 我是否必須將use包裝在 try/catch 中? 這似乎很荒謬。

來自 Kotlin 文檔:

在此資源上執行給定的塊 function,然后無論是否引發異常都正確關閉它。

當您使用實現Closeable接口的 object 時,您需要在完成后調用close()方法,因此它會釋放與 object 關聯的所有系統資源。

即使拋出異常,您也需要小心並關閉它。 在這種容易出錯的情況下,由於您可能不知道或忘記正確處理它,最好將這種模式自動化。 這正是使用function 所做的。

您的try-catch不會關閉資源,因此您將蘋果與橙子進行比較。 如果您在finally塊中關閉資源:

val is = FileInputStream(file)
try {
    ...
} 
catch (e: IOException) {
    ...
}
finally {
    is.close()
}

絕對比處理關閉資源的use更冗長。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM