我在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()

  }
}

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

最佳答案

您的代码基本上意味着InnerClassXInnerClassSuper的内部类,而不是OuterClass,因此错误意味着您在构造InnerClasssSuper时需要提供InnerClassX的接收器对象。

此时,Kotlin允许inner sealed类既不具有sealed类,也不具有派生类作为另一个类的inner类。

但是,您可以创建一个从abstract派生的sealed类,并在OuterClass内部继承它:

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

08-05 19:29