Kotlin: ¿Cómo puede un constructor hijo usar el constructor secundario de sus padres?

Por ejemplo, tenemos este padre:

open class Parent(val id: Int, val name: String?) { constructor() : this(-1, null) } 

Y un elemento secundario, que debe tener tanto un constructor de dos param como un constructor vacío, como el padre:

 class Child(id: Int, name: String?) : Parent(id, name) { constructor() : super() // syntax error } 

¿Cómo puede un constructor hijo usar el constructor secundario de sus padres?

Soy consciente de que puedo implementar un constructor hijo que transmita los mismos valores que el padre, pero esto no solo parece networkingundante sino que muchas veces mis hijos tienen parameters adicionales para su constructor primario, pero no requieren constructores intermediarios (constructores con params que no incluyen todos los params adicionales). Aquí hay un ejemplo de un niño que lo implementa de esa manera, en caso de que no esté claro:

 class Child(id: Int, name: String?) : Parent(id, name) { constructor() : this(-1, null) // no syntax error, but networkingundant } 

La mejor manera de lograr esto es imho usando parameters pnetworkingeterminados para tu constructor

 class Child(id: Int = -1, name: String? = null) : Parent(id, name) 

Dependiendo de la influencia que tenga en la class de Parent , tal vez incluso

 class Parent(val id: Int = -1, val name: String? = null) 

Sin embargo, esto tiene un "inconveniente": técnicamente obtendrás tres constructores diferentes. Pero no puedo ver cómo esto podría ser un problema, ya que tienes que manejar los casos id=-1 y name=null todos modos.

Además, no creo que tu solución

 class Child(id: Int, name: String?) : Parent(id, name) { constructor() : this(-1, null) } 

es malo o "networkingundante" de alguna manera; al contrario: es altamente expresivo y explícito, por lo que el lector sabe exactamente cuál era su intención.

Primero, no puede extender la class Parent ya que no está open .

En segundo lugar, si una class ha declarado un constructor primario, no puede llamar al constructor de la superclass mediante la palabra key super .

Por otro lado, si quieres llamar al constructor de la super por la palabra key super . necesitas hacer el constructor primario para el constructor secundario, por ejemplo:

 class Child : Parent { constructor(id: Int, name: String?) : super(id, name) constructor() : super() } 

Otra opción es dejar que el constructor secundario llame al constructor primario con this palabra key, pero creo que es innecesario y los parameters duplicates con el constructor secundario de la superclass:

 class Child(id: Int, name: String?) : Parent(id, name) { constructor() : this(-1, null); } 
  • Cómo implementar TornadoFX WebEngine Callback en Kotlin
  • problemas del comstackdor de Kotlin para la class no resuelta
  • En Kotlin Cómo leer y analizar el file json
  • testing JOOQ postgres jsonb column for key exists
  • Android + Kotlin: el proyecto ya no se construye
  • no se puede crear ArrayList dentro de la subclass RealmObject
  • Error ': app: kaptDebugKotlin' en la versión estable de android studio 3 con la habitación 1 (RC)
  • Cómo deshabilitar el button de punto en Android Kotlin
  • ¿Puedo tener un tipo de devolución diferente en kotlin?
  • Captura del comodín de Kotlin en el parámetro de callback de la list
  • Java ArrayList a Kotlin Array