टीएल; डीआर: कोई विशेष वाक्यविन्यास, सिर्फ एक फ़ंक्शन
कोटलिन, जैसा कि जावा के विपरीत है, इसके लिए एक विशेष वाक्यविन्यास नहीं है। इसके बजाय, कोशिश-के साथ संसाधनों , मानक पुस्तकालय समारोह के रूप में पेश किया जाता है use
।
FileInputStream("filename").use { fis -> //or implicit `it`
//use stream here
}
use
कार्यान्वयन
@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()
}
}
}
इस फ़ंक्शन को सभी Closeable?
प्रकारों पर एक सामान्य विस्तार के रूप में परिभाषित किया गया है । Closeable
जावा का इंटरफ़ेस है जो जावा SE7 के रूप में कोशिश-के-संसाधनों की अनुमति देता है ।
फ़ंक्शन एक फ़ंक्शन शाब्दिक लेता है जिसे ए में निष्पादित किया जाता है । जावा में ट्राय -विथ-रिसोर्सेस के साथ ही , बंद हो जाता है ।
block
try
Closeable
finally
इसके अलावा असफलताओं block
को close
अंजाम देने के लिए नेतृत्व किया जा रहा है , जहां संभवत: अपवादों को केवल उन्हें अनदेखा करके "दबा" दिया जाता है। यह कोशिश-के-संसाधनों से अलग है , क्योंकि जावा के समाधान में ऐसे अपवादों का अनुरोध किया जा सकता है ।
इसे कैसे उपयोग करे
use
विस्तार से किसी पर उपलब्ध है Closeable
पाठकों और इतने पर, यानी धाराओं, टाइप।
FileInputStream("filename").use {
//use your stream by referring to `it` or explicitly give a name.
}
घुंघराले ब्रैकेट में जो हिस्सा है, वह बन जाता block
है use
(एक लंबो को यहां एक तर्क के रूप में पारित किया जाता है)। ब्लॉक किए जाने के बाद, आप सुनिश्चित कर सकते हैं कि FileInputStream
बंद कर दिया गया है।