mfulton26 के उत्तर में लोगों के अलावा चौथा विकल्प है।
?.
ऑपरेटर का उपयोग करके let
से निपटने या स्थानीय चर का उपयोग किए बिना विधियों के साथ-साथ फ़ील्ड को कॉल करना संभव है।
संदर्भ के लिए कुछ कोड:
var factory: ServerSocketFactory = SSLServerSocketFactory.getDefault();
socket = factory.createServerSocket(port)
socket.close()//smartcast impossible
socket?.close()//Smartcast possible. And works when called
यह विधियां, फ़ील्ड और सभी अन्य बातों के मैं यह काम करने के लिए प्राप्त करने की कोशिश के साथ काम करता है।
इसलिए समस्या को हल करने के लिए, मैन्युअल कास्ट या स्थानीय चर का उपयोग करने के बजाय, आप विधियों को कॉल करने के लिए ?.
का उपयोग कर सकते हैं।
संदर्भ के लिए, यह कोटलिन 1.1.4-3
में परीक्षण किया गया था, लेकिन 1.1.51
और 1.1.60
में भी परीक्षण किया गया था। इस बात की कोई गारंटी नहीं है कि यह अन्य संस्करणों पर काम करता है, यह एक नई सुविधा हो सकती है।
?.
ऑपरेटर का उपयोग आपके मामले में नहीं किया जा सकता है क्योंकि यह एक पारित चर है जो समस्या है। एल्विस ऑपरेटर को एक विकल्प के रूप में इस्तेमाल किया जा सकता है, और शायद यह वह है जिसके लिए कम से कम कोड की आवश्यकता होती है। continue
का उपयोग करने के बजाय, return
का भी उपयोग किया जा सकता है।
मैनुअल कास्टिंग का उपयोग करना भी एक विकल्प हो सकता है, लेकिन इस अशक्त सुरक्षित नहीं है:
queue.add(left as Node);
अर्थ अगर छोड़ दिया एक अलग धागे पर बदल गया है, कार्यक्रम दुर्घटना होगा।
कहीं अलग थ्रेड के बीच में मूल्य को फिर से शून्य में बदल दिया होगा। मुझे यकीन है कि अन्य सवालों के जवाब भी निश्चित हैं। – nhaarman
आप – Whymarrh
को जोड़ने के लिए एक [सुरक्षित कॉल] (https://kotlinlang.org/docs/reference/null-safety.html#safe-calls) का उपयोग कर सकते हैं धन्यवाद @ नहरमन जो समझ में आता है, Whymarrh यह कैसे कर सकता है? मैंने सोचा कि सुरक्षित कॉल केवल ऑब्जेक्ट्स के लिए नहीं थे – feresr