我有课
data classOuter (
val str: String = "fOo"
...
val innerClassInstance: InnerClass= InnerClass(),
) {
...
inner class InnerClass {
fun foo () {
return str.toLowerCase()
}
}
}
但是我收到错误:
Constructor of inner class InnerClass can be called only with receiver of containing class
有办法避免吗?
存在先有鸡还是先有蛋的问题。内部类对象指的是父类对象,此时父类对象尚未构造(向父类的构造函数传递参数时)。
您可以使用嵌套类对象的延迟初始化,因此它将在父类对象已经存在时进行初始化。喜欢:
data class classOuter (
val str: String = "foo"
) {
val innerClassInstance: InnerClass by lazy { this.InnerClass() }
inner class InnerClass {
fun foo () : String {
return str.toLowerCase()
}
}
}
fun main() {
println(classOuter("bar").innerClassInstance.foo())
}