【问题标题】:Kotlin: Constructor of inner class can be called only with receiver of containing classKotlin:内部类的构造函数只能用包含类的接收者调用
【发布时间】:2018-05-15 17:18:45
【问题描述】:

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

  }
}

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

【问题讨论】:

    标签: constructor kotlin inner-classes


    【解决方案1】:

    我们也可以这样使用

    OuterClassName().NestedClassName()

    【讨论】:

      【解决方案2】:

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

      此时,Kotlin 不允许将 inner sealed 类和 sealed 类的派生类作为另一个类的 inner 类。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-06-25
        • 2019-02-23
        • 1970-01-01
        • 1970-01-01
        • 2021-05-07
        相关资源
        最近更新 更多