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

Pra*_*ane 8 constructor inner-classes kotlin

我在Kotlin尝试内部课程并遇到了这个错误,但并不太明白.我试着看一下这里的文档,但是对外层类如何访问内部类构造函数没有任何指导

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

  }
}
Run Code Online (Sandbox Code Playgroud)

如果有人解释错误并指示如何解决错误,将不胜感激.谢谢.

小智 11

我们也可以这样使用

OuterClassName().NestedClassName()


hot*_*key 8

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

在这一点上,科特林允许具有既不是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")
    }
}
Run Code Online (Sandbox Code Playgroud)