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