मैं एक प्राथमिक निर्माता के साथ निम्न kotlin वर्ग, हैमाध्यमिक निर्माण वाक्य रचना kotlin
class Person(first: String, last: String, age: Int){
init{
println("Initializing")
}
}
मैं एक माध्यमिक निर्माता है कि एक first
और last
नाम में एक पूरा नाम पार्स करके प्राथमिक निर्माता कॉल जोड़ना चाहते हैं। हालांकि, मैं वाक्य रचना सही नहीं मिल सकता है ...
class Person(first: String, last: String, age: Int){
// Secondary constructor
constructor(fullname: String, age: Int):
this("first", "last", age)
{
println("In secondary constructor")
}
init{
println("Initializing")
}
}
यह ठीक काम करता है, क्योंकि मैं वास्तव में माध्यमिक निर्माता में fullname
को पार्स कर रहा हूँ। जब मैं आगे बढ़ता हूं और पूर्ण नाम पार्स करने का प्रयास करता हूं,
constructor(fullname: String, age: Int):
var first = fullname.split()[0];
...
{
println("In secondary constructor")
}
मुझे एक अनसुलझा संदर्भ मिलता है: पूर्ण नाम। यह दायरे में मौजूद नहीं है, लेकिन अगर मैं यह ब्रेसिज़ में डाल, तो मैं this
के माध्यम से प्राथमिक निर्माता फोन नहीं कर सकते हैं,
constructor(fullname: String, age: Int):
{
var first = fullname
this(first, "foo", age)
println("In secondary constructor")
}
मैं एक लापता invoke
समारोह से जुड़े कोई त्रुटि मिलती है।
कोटलिन दस्तावेज़ों पर इस मामले का एक अच्छा उदाहरण नहीं मिल रहा है, क्षमा करें।
आप हमेशा कारखाने के तरीकों का पर्दाफाश कर सकते हैं और रचनाकारों के विरोध में उनको प्रतिनिधि दे सकते हैं, जिससे आप यह तय कर सकते हैं कि वास्तव में कब प्रतिनिधि होना है, या केवल अपने पहले कन्स्ट्रक्टर में 'पहले' और 'अंतिम' के लिए चर घोषित न करें। लेकिन अगर आपको मुझसे कोई फर्क नहीं पड़ता है, तो आपको 'व्यक्ति (पहली, आखिरी, उम्र)' और 'व्यक्ति (पूर्ण नाम, आयु)' का खुलासा क्यों करना चाहिए? क्या होगा यदि क्लाइंट 'fullName' का उपयोग करते समय पहले और आखिरी के बीच एक जगह जोड़ने के लिए भूल जाता है? आप कन्स्ट्रक्टर प्रतिनिधिमंडल से पहले एक चर घोषित नहीं कर सकते हैं। –
यह सिर्फ एक खिलौना उदाहरण है, मैं वास्तव में इन दो रचनाकारों का निर्माण नहीं करता। क्या आप कह रहे हैं कि मैं इस तरह से एक माध्यमिक कन्स्ट्रक्टर का उपयोग नहीं कर सकता? सादे जावा में, मैंने सोचा कि आप माध्यमिक रचनाकारों में चर घोषित कर सकते हैं? तो मुझे लगता है कि यह सिर्फ एक बुरा उदाहरण है, और यह एक उपयोग मामले पर मार रहा है कि अच्छा कोडिंग से बचेंगी? –
हां, आप इस तरह से माध्यमिक कन्स्ट्रक्टर का उपयोग नहीं कर सकते हैं। 'यह एक प्रतिनिधिमंडल है, यही कारण है कि आप इसे ब्रेसिज़ के भीतर उपयोग नहीं कर सकते हैं। आपको 'कन्स्ट्रक्टर (...) की रेखाओं के साथ कुछ करना होगा: यह (fullName.split ("") [0], fullName.split ("") [1])' जिसमें अनुक्रमण के लिए संभावित क्षमता है सीमाओं का –