委托给初始化属性时,“variables必须初始化”错误
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
。
我推测,在一个对象上使用类委托有点不明显,所以这可能是为什么的本质。
解决方法是直接委托给String的实例。 这段代码适用于我:
fun main(args: Array) { println("Hello, world! ${Bar.Foo.indexOf("z")}") // Prints "2" } class Bar { companion object Foo : CharSequence by String(StringBuilder("xyzzy")) { } }
除此之外:Kotlin中的字符串没有构造函数需要String参数。 奇怪的,那个。