वहाँ mfulton26 के जवाब में लोगों के अलावा एक चौथा विकल्प है।
का उपयोग करके ?.
ऑपरेटर से निपटने के बिना तरीकों के साथ-साथ खेतों कॉल करने के लिए संभव है let
या स्थानीय चर का उपयोग कर।
संदर्भ के लिए कुछ कोड:
var factory: ServerSocketFactory = SSLServerSocketFactory.getDefault();
socket = factory.createServerSocket(port)
socket.close()//smartcast impossible
socket?.close()//Smartcast possible. And works when called
यह तरीकों, क्षेत्रों और अन्य सभी चीजों के साथ काम करता है जो मैंने इसे काम करने के लिए प्राप्त करने की कोशिश की।
इसलिए समस्या को हल करने के लिए, मैनुअल कास्ट का उपयोग करने या स्थानीय चर का उपयोग करने के बजाय, आप ?.
विधियों को कॉल करने के लिए उपयोग कर सकते हैं ।
संदर्भ के लिए, इस Kotlin में परीक्षण किया गया था 1.1.4-3
, लेकिन यह भी में परीक्षण किया 1.1.51
और 1.1.60
। इसकी कोई गारंटी नहीं है कि यह अन्य संस्करणों पर काम करता है, यह एक नई सुविधा हो सकती है।
?.
ऑपरेटर का उपयोग करना आपके मामले में उपयोग नहीं किया जा सकता है क्योंकि यह एक पारित चर है जो समस्या है। एल्विस ऑपरेटर को एक विकल्प के रूप में इस्तेमाल किया जा सकता है, और यह शायद वह है जिसे कम से कम कोड की आवश्यकता होती है। continue
हालांकि उपयोग करने के बजाय , return
भी इस्तेमाल किया जा सकता है।
मैनुअल कास्टिंग का उपयोग करना भी एक विकल्प हो सकता है, लेकिन यह सुरक्षित नहीं है:
queue.add(left as Node);
मतलब अगर बाएं एक अलग धागे पर बदल गया है, तो प्रोग्राम क्रैश हो जाएगा।