Constructor of inner class ... can be called only with receiver of containing class

遇到 Constructor of inner class … can be called only with receiver of containing class 错误,通常是因为你在尝试实例化一个 inner class 时,没有正确地提供外部类的实例。

在 Kotlin 中,inner class 会持有外部类的引用,因此要实例化 inner class,你需要先实例化外部类,再通过外部类的实例来创建内部类的实例。

错误解析

当你遇到错误信息 Constructor of inner class … can be called only with receiver of containing class,这意味着你尝试直接实例化 inner class,但是没有提供外部类的实例。Kotlin 要求你通过外部类的实例来访问 inner class 的构造函数。

解决方法

确保你通过外部类的实例来创建内部类的实例。举个例子:

class OuterClass {
    val someProperty = "Hello from outer class"

    inner class InClass {
        fun printInfo() {
            println(someProperty)
        }
    }
}

你不能直接通过 OuterClass.InClass() 来实例化内部类 InClass,因为它是 inner class,它需要一个外部类的实例。
正确的方式:

fun main() {
    // 创建外部类的实例
    val outerInstance = OuterClass()

    // 通过外部类的实例来创建内部类的实例
    val innerInstance = outerInstance.InClass()

    // 调用内部类的方法
    innerInstance.printInfo()  // 输出: Hello from outer class
}

解释

  1. InClass是 OuterClass 的内部类,内部类持有外部类的引用,因此必须通过外部类的实例来创建它的对象。
  2. 使用 outerInstance.InClass() 来正确地实例化内部类。

如果你直接尝试:

val innerInstance = OuterClass.InClass()  // 错误

你会遇到 Constructor of inner class InClass can be called only with receiver of containing class 错误。因为 InClass是 inner class,你必须先创建 OuterClass 的实例才能创建 InClass的实例。

总结

  • 内类 (inner class) 必须通过外部类的实例来创建,因为它持有外部类的引用。
  • 确保你先实例化外部类,再通过外部类的实例来实例化内部类。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值