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 } 
  • Las annotations en time de ejecución anotadas en una class archivada en kotlin no se generan correctamente
  • Comprende cómo funcionan los comodines y los cartones reificados en Kotlin
  • Kotlin Cast String como String.Companion
  • Recurso esperado de tipo ID
  • ¿Cuándo no usar el Observable de RxJava?
  • Cambiar el filter de color del elemento del cajón de navigation también cambia el imageView, que es el mismo ID de image
  • Cómo integrar Admob Native Advanced Ads usando Kotlin - Android
  • Consultar Androids ContactsContract en Kotlin
  • Comprender los ejecutores kotlin
  • Enlace de datos de atributo personalizado Kotlin
  • Gson o Moshi: campo en POJO podría tener 2 types, cómo save en cualquiera de los campos