Kotlin: Le constructeur de la classe interne ne peut être appelé qu'avec le récepteur de la classe contenant

Pravin Sonawane

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.

touche de raccourci

Votre code signifie essentiellement qu'il InnerClassXs'agit d'une classe interne de InnerClassSuper, non OuterClass, donc l'erreur signifie que vous devez fournir un objet récepteur de InnerClasssSuperlors de la construction de InnerClassX.

À ce stade, Kotlin permet de n'avoir ni inner sealedclasse ni classe dérivée pour une sealedclasse en tant que innerclasse d'une autre classe.

Vous pouvez cependant créer une abstractclasse dérivée de celle- sealedci 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

Editado en
0

Déjame decir algunas palabras

0Comentarios
Iniciar sesiónRevisión de participación posterior

Artículos relacionados

TOP Lista

CalienteEtiquetas

Archivo