[英]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.