Kotlin:内部class的构造函数只能用包含class的接收者调用

Kotlin: Constructor of inner class can be called only with receiver of containing class

我在 Kotlin 中尝试内部 classes 并遇到了这个错误,但不太理解它。我试图查看文档 here 但没有完全了解外部 classes 如何访问内部 class 构造函数

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 的内部 class,而不是 OuterClass,所以错误意味着你需要提供 InnerClassSuper 的接收者对象=14=] 在构造 InnerClassX.

在这一点上,Kotlin 允许 inner sealed class 和 sealed class 的派生 class 作为 inner class 另一个 class.

但是,您可以从 sealed 派生一个 abstract class 并在 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")
    }
}

我们也可以这样使用

OuterClassName().NestedClassName()