委托给初始化属性时,“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参数。 奇怪的,那个。