当我在构造函数中创建内部类实例时,“只能使用包含类的接收者来调用内部类的构造函数”

问题描述 投票:0回答:1

我有课

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

有办法避免吗?

kotlin constructor inner-classes
1个回答
0
投票

存在先有鸡还是先有蛋的问题。内部类对象指的是父类对象,此时父类对象尚未构造(向父类的构造函数传递参数时)。

您可以使用嵌套类对象的延迟初始化,因此它将在父类对象已经存在时进行初始化。喜欢:

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())
}
© www.soinside.com 2019 - 2024. All rights reserved.