2017-11-20 10 views
9
object Foo : CharSequence by Foo.X { 
    val X = "" 
} 

त्रुटि "चर प्रारंभ किया जाना चाहिए"

Variable 'X' must be initialized 

पैदा करता है लेकिन यह है! और कोड को

object Foo : CharSequence { 
    val X = "" 
    override val length get() = Foo.X.length 
    override operator fun get(index: Int): Char = Foo.X[index] 
    override fun subSequence(startIndex: Int, endIndex: Int) = Foo.X.subSequence(startIndex, endIndex) 
} 

जैसे कुछ अच्छी तरह से काम करना चाहिए।

त्रुटि का कारण क्या है और क्या कोई कामकाज है? वास्तविक कोड प्रारंभ में गैर-तुच्छ है और Foo को object (वास्तव में, एक साथी ऑब्जेक्ट) होना चाहिए, class नहीं।

उत्तर

1

मुझे लगता है कि किसी ऑब्जेक्ट पर क्लास प्रतिनिधिमंडल का उपयोग थोड़ा स्पष्ट नहीं है, इसलिए शायद का सार क्यों है।

एक वर्कअराउंड सीधे स्ट्रिंग के उदाहरण को प्रस्तुत करना है। इस कोड को मेरे लिए काम करता है:

fun main(args: Array<String>) { 
    println("Hello, world! ${Bar.Foo.indexOf("z")}") // Prints "2" 
} 

class Bar { 
    companion object Foo : CharSequence by String(StringBuilder("xyzzy")) { 
    } 
} 
एक तरफ

: Kotlin में String कोई निर्माता है कि एक स्ट्रिंग पैरामीटर लेता है। अजीब, वह।

+2

अंतिम वाक्य के बारे में: संबंधित जावा कन्स्ट्रक्टर ने संस्करण 7u6 के बाद इसका मुख्य उपयोग खो दिया है (यदि मुझे सही याद है, लेकिन यह उस सीमा में कुछ होना चाहिए) और पिछली संगतता के लिए अभी भी मौजूद है। कोटलिन को इसकी प्रतिलिपि बनाने की आवश्यकता नहीं है। –

+0

हां मुझे एहसास हुआ कि ऊपर दिए गए कोड में उस कन्स्ट्रक्टर का उपयोग करने की कोई आवश्यकता नहीं है .. यह समकक्ष है: 'साथी ऑब्जेक्ट फू: "xyzzy" द्वारा charSequence " –

संबंधित मुद्दे