Kotlin: constructor secundario con esta palabra key

data class DisjointSetNode<T>(var parent: DisjointSetNode<T>, var data: T, var rank: Int) { constructor(data: T): this(parent = this, data = data, rank = 0) 

Me preguntaba por qué recibo un error al decir que no puedo usar la palabra key this en la llamada al constructor porque no he llamado primero al constructor de la superclass. No hay una superclass, y quiero ser padre. ¿Alguna idea de cómo iba a hacer esto?

el problema es que no se puede llamar a this durante la llamada a otro constructor por this(...) . puedes echarle un vistazo a JLS :

Es un error en time de compilation para un constructor invocarse directa o indirectamente a través de una serie de una o más invocaciones de constructor explícitas que involucran esto .

  • significa directamente llamar this en this(...) en la primera statement, por ejemplo: this(this); .

  • indirectamente significa llamar a sus miembros durante la llamada a this(...) , por ejemplo: this(parent) .

pero puede hacer que el constructor primario sea un constructor secundario para lograr su objective, por ejemplo:

 data class DisjointSetNode<T>(var data: T, var rank: Int = 0) { var parent: DisjointSetNode<T> = this constructor(parent: DisjointSetNode<T>, data: T) : this(data = data){ this.parent = parent } } 

No puede hacer reference a this en este context porque aún no está definido.

Sin embargo, puedes mover al parent fuera de la firma del constructor. p.ej:

 data class DisjointSetNode<T>(var data: T, var rank: Int = 0) { var parent: DisjointSetNode<T> = this } 
  • Sitio de Android: select la consulta con LIKE
  • kotlin jvmname ignorado por Gradle?
  • ¿Cómo puedo tener una key compuesta en Kotlin?
  • Kotlin: ¿Qué puedo hacer cuando una biblioteca Java tiene una sobrecarga de tipo primitivo y encuadrado?
  • En Kotlin ¿Cómo puedo convertir un int? a un Int
  • Obtenga ClassLoader de gradle org.gradle.api.Project?
  • Anko - Configuración del valor de fila y columna para un elemento en gridLayout
  • Estrategia JxBrowser para recuperar de manera eficiente el favicon
  • OnErrorNotImplementedException utilizando RxJava2 y Retrofit2 Mosby MVI
  • package de caja de serpiente detekt
  • Cómo usar la class ContextWrapper con subscribeWith