Kotlin:内部类的构造函数只能与包含类的接收器一起调用

pes8fvy9  于 2022-11-16  发布在  Kotlin
关注(0)|答案(2)|浏览(297)

我在Kotlin中尝试内部类时遇到了这个错误,但我并不完全理解它。我试图查看文档here,但没有得到任何关于外部类如何访问内部类构造函数的指导

class OuterClass {

  fun someFun(): InnerClassSuper {
    return InnerClassX("Hello") //Error: Constructor of inner class InnerClassX can be called only with receiver of containing class
  }

  sealed class InnerClassSuper {

    inner class InnerClassX(val x: String): InnerClassSuper()

  }
}

如果有人解释错误并指导如何修复它,将不胜感激。谢谢。

zf2sa74q

zf2sa74q1#

我们也可以这样用
外部类名().嵌套类名()

y4ekin9u

y4ekin9u2#

您的代码基本上意味着InnerClassXInnerClassSuper的内部类,而不是OuterClass,因此该错误意味着您需要在构造InnerClassX时提供InnerClasssSuper的接收器对象。
此时,Kotlin允许inner sealed类和sealed类的派生类都不作为另一个类的inner类。
但是,您可以从sealed类派生abstract类,并在OuterClass中继承abstract类:

sealed class SealedClassSuper {
    abstract class SealedClassChild(val x: String): SealedClassSuper()
}

class OuterClass {
    inner class InnerClassX(x: String) : SealedClassSuper.SealedClassChild(x)

    fun someFun(): SealedClassSuper {
        return InnerClassX("Hello")
    }
}

相关问题