J'essayais des classes internes dans Kotlin et suis tombé sur cette erreur mais je ne l'ai pas bien comprise. J'ai essayé de regarder la documentation ici mais je n'ai pas vraiment obtenu d'indications sur la façon dont les classes externes peuvent accéder aux constructeurs de classes internes
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()
}
}
J'apprécierais que quelqu'un explique l'erreur et indique comment la corriger. Merci.
Votre code signifie essentiellement qu'il InnerClassX
s'agit d'une classe interne de InnerClassSuper
, non OuterClass
, donc l'erreur signifie que vous devez fournir un objet récepteur de InnerClasssSuper
lors de la construction de InnerClassX
.
À ce stade, Kotlin permet de n'avoir ni inner sealed
classe ni classe dérivée pour une sealed
classe en tant que inner
classe d'une autre classe.
Vous pouvez cependant créer une abstract
classe dérivée de celle- sealed
ci et en hériter dans le 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")
}
}
Este artículo se recopila de Internet, indique la fuente cuando se vuelva a imprimir.
En caso de infracción, por favor [email protected] Eliminar
Déjame decir algunas palabras