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()
}
}
誰かがエラーを説明し、それを修正する方法を指示してくれれば幸いです。ありがとう。
あなたのコードは基本的にInnerClassX
がInnerClassSuper
ではなく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")
}
}