2017-06-29 39 views
7

में शून्य रिटर्न प्रकार का मतलब क्या है, मैंने कोटलिन में मूल्य वापस किए बिना फ़ंक्शन बनाने का प्रयास किया। और मैं जावा में लेकिन Kotlin वाक्य रचनाकोटलिन

fun hello(name: String): Void { 
    println("Hello $name"); 
} 

साथ की तरह एक समारोह में लिखा था और मैं एक त्रुटि

Error:A 'return' expression required in a function with a block body ('{...}')

परिवर्तन मैं वापसी प्रकार के रूप में नल शून्य के साथ समारोह काम कर गया गया है की जोड़ी के बाद मिल गया है। लेकिन यह वास्तव में क्या मैं

fun hello(name: String): Void? { 
    println("Hello $name"); 
    return null 
} 

जरूरत के लिए Kotlin documentation इकाई प्रकार जावा में शून्य के अनुरूप अनुसार नहीं है। तो Kotlin में मूल्य लौटने के बिना सही समारोह

fun hello(name: String): Unit { 
    println("Hello $name"); 
} 

या

fun hello(name: String) { 
    println("Hello $name"); 
} 

सवाल यह है कि है: क्या Void Kotlin में क्या मतलब है, यह कैसे उपयोग करने के लिए और इस तरह के उपयोग के लाभ क्या है?

उत्तर

7

Void एक सादा जावा क्लास है और इसका कोटलिन में कोई विशेष अर्थ नहीं है।

उसी तरह से आप कोटलिन में Integer का उपयोग कर सकते हैं, जो जावा क्लास है (लेकिन कोटलिन के Int का उपयोग करना चाहिए)। आपने कुछ भी वापस नहीं करने के दोनों तरीकों का सही ढंग से उल्लेख किया है। तो, कोटलिन Void में "कुछ" है!

आपको जो त्रुटि संदेश मिलता है, वह आपको बिल्कुल बताता है। आपने रिटर्न प्रकार के रूप में एक (जावा) कक्षा निर्दिष्ट की है लेकिन आपने ब्लॉक में रिटर्न स्टेटमेंट का उपयोग नहीं किया है।

यह करने के लिए छड़ी, आप कुछ भी वापस जाने के लिए नहीं करना चाहते हैं:

fun hello(name: String) { 
    println("Hello $name"); 
} 
3

Void जावा में एक वस्तु है, और इसका अर्थ है 'कुछ नहीं'।
Kotlin में, 'कुछ भी नहीं' के लिए विशेष प्रकार के होते हैं:

  • Unit -> की जगह जावा के void
  • Nothing -> 'एक मूल्य है कि कभी नहीं मौजूद है' Kotlin आप में

अब संदर्भ Void, जैसा कि आप जावा से किसी भी वर्ग का संदर्भ दे सकते हैं, लेकिन आपको वास्तव में नहीं करना चाहिए। इसके बजाय, Unit का उपयोग करें। इसके अलावा, अगर आप Unit लौटते हैं, तो आप इसे छोड़ सकते हैं।

+2

'Void' (जो वास्तव में है: [' java.lang.Void'] (http://docs.oracle। com/javase/8/docs/api/java/lang/void.html)) एक * ऑब्जेक्ट * नहीं है, यह जावा में एक * वर्ग * है। आप इस वर्ग के उदाहरण नहीं बना सकते हैं। – Jesper