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