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); } 
  • Implemente y ejecute nodos dinámicamente en CORDA
  • Clase Kotlin no encontrada cuando se construyó con jenkins
  • Cómo comparar una class <*> contra un tipo primitivo en caja Java sin las advertencias del comstackdor de Kotlin
  • Kotlin: recursión de queue para funciones mutuamente recursivas
  • Confusión de la syntax de Kotlin lambda
  • Kotlin tiene array.indexOf pero no puedo entender cómo hacer array.indexOfBy {lambda}
  • Kotlin "El reparto inteligente es imposible, porque la propiedad podría haberse cambiado en este momento"
  • Dagger + Kotlin no se inyecta
  • Kotlin lazy default property
  • ¿Accediendo a la function de extensión estática de otra class en Kotlin?
  • rxjava2 - ejemplo simple de ejecutar tareas en un grupo de subprocesss, suscribirse en un solo hilo