我有一节课

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

有什么方法可以避免吗?

推荐答案

有鸡和蛋的问题.Inner class object指的是父类对象,此时(在将参数传递给父类的构造函数时)尚未构造.

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

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())
}

Kotlin相关问答推荐

如果一项工作失败,请继续在Kotlin 等待其他工作/子元素完成

在调用父构造函数之前重写类属性

如何优雅地声明一个StateFlow?

如何在数据类中删除空格 (String)?

在 kotlin 中使具体化字段可选

为什么这两个 Kotlin 协程函数不一样?

如何将光标从一个文本字段传递到 Jetpack Compose 中的其他文本字段?

JetPack Compose:添加点击持续时间

如何将jooq multiset的结果映射到Hashmap(Java Map)?

使用 LazyListScope 嵌套可组合项

如何在 IntelliJ 中更改 Kotlin 的this property has a backing field代码编辑器突出显示?

类型是什么意

如何从 Firestore 查询中排除元素?

在 Koin 中提供一个 Instance 作为其接口

将 @Component.Builder 与构造函数参数一起使用

Kotlin:如何从另一个类访问字段?

Android EditText 协程go 抖操作符,如 RxJava

如何为 Java 调用者声明返回类型为void的 Kotlin Lambda?

Kotlin中对象和数据类的区别是什么?

任务':app:kaptDebugKotlin'的Kotlin执行失败