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()
}
}
如果有人解释错误并指导如何修复它,我们将不胜感激。
谢谢
你的代码基本上意味着 InnerClassX
是 InnerClassSuper
的内部 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()
我在 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()
}
}
如果有人解释错误并指导如何修复它,我们将不胜感激。 谢谢
你的代码基本上意味着 InnerClassX
是 InnerClassSuper
的内部 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()