TL; DR: Özel bir sözdizimi yok, sadece bir işlev
Kotlin'in, Java'nın aksine, bunun için özel bir sözdizimi yoktur. Bunun yerine, kaynaklarla deneme , standart kitaplık işlevi olarak sunulur use
.
FileInputStream("filename").use { fis -> //or implicit `it`
//use stream here
}
use
uygulamaları
@InlineOnly
public inline fun <T : Closeable?, R> T.use(block: (T) -> R): R {
var closed = false
try {
return block(this)
} catch (e: Exception) {
closed = true
try {
this?.close()
} catch (closeException: Exception) {
}
throw e
} finally {
if (!closed) {
this?.close()
}
}
}
Bu işlev, tüm Closeable?
türlerde genel bir uzantı olarak tanımlanır . Closeable
Java'nın Java SE7'den itibaren kaynaklarla denemeye izin veren arayüzüdür .
Bu işlev , a'da çalıştırılan bir değişmez işlevi alır . İle aynı denemede-ile-kaynaklar Java, alır kapalı bir yer .
block
try
Closeable
finally
Ayrıca, içeride meydana block
gelen arızalar close
, olası istisnaların sadece görmezden gelinerek "bastırıldığı" infazlara yol açar . Bu , Java'nın çözümünde böyle istisnalar istenebileceğinden, kaynaklarla denemeden farklıdır .
Bu nasıl kullanılır
use
Uzatma herhangi mevcuttur Closeable
okuyucular ve benzeri yani akarsu, tip.
FileInputStream("filename").use {
//use your stream by referring to `it` or explicitly give a name.
}
Kıvırcık parantez içindeki parçası haline gelir ne block
de use
(bir lambda burada bağımsız değişken olarak geçirilir). Blok tamamlandıktan sonra, FileInputStream
kapalı olduğundan emin olabilirsiniz .