object Foo : CharSequence by Foo.X {
val X = ""
}
Run Code Online (Sandbox Code Playgroud)
产生
Variable 'X' must be initialized
Run Code Online (Sandbox Code Playgroud)
但它是!代码应转换为类似的东西
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)
}
Run Code Online (Sandbox Code Playgroud)
效果很好.
错误的原因是什么,是否有解决方法?在实际代码中,初始化是非常重要的,并且Foo需要是object(实际上是伴随对象),而不是a class.
我推测在对象上使用类委托有点不明显,所以这可能就是原因的本质。
解决方法是直接委托给 String 的实例。这段代码对我有用:
fun main(args: Array<String>) {
println("Hello, world! ${Bar.Foo.indexOf("z")}") // Prints "2"
}
class Bar {
companion object Foo : CharSequence by String(StringBuilder("xyzzy")) {
}
}
Run Code Online (Sandbox Code Playgroud)
旁白:StringKotlin 中没有采用 String 参数的构造函数。奇怪的是。
| 归档时间: |
|
| 查看次数: |
690 次 |
| 最近记录: |