Clase extendida con muchos parameters

Tengo una class llamada A:

open class A (a: String, b: String, c: String) 

Y una class B que se extiende A:

 class B(a: String, b: String, c: String, d: String) : A(a, b, c) 

Mi pregunta es si hay una manera de hacer algo como esto, para evitar declarar todos los parameters de A dentro del constructor B:

 class B(super, d:String) : A(super) 

Si no, debería haber =)

Puede crear una interfaz común para las classs y luego usar la delegación para acercarse lo que desea. Me gusta esto:

 interface C { val a: String val b: String val c: String } class A(override val a: String, override val b: String, override val c: String) : C class B(c: C, val d: String) : C by c 

Al hacer esto, puedes instanciar una B como esta:

 val b = B(A("1", "2", "3"), "4") 

No , Kotlin no contiene ningún constructo que le permita simplificar los parameters del constructor que coinciden con los parameters de la superclass.

No creo que esté de acuerdo con que esta sea una característica del lenguaje, pero recomendaría comenzar una conversación en YouTrack si cree que debería ser.

Cuando se encuentre con este problema, debe preguntarse por qué dicha class necesita muchos parameters / dependencies en lugar de descubrir la solución por syntax del lenguaje. Tal vez su responsabilidad no está clara.

SI hay muchos conceptos de dominio mezclados en una class, entonces necesita networkingiseñar sus classs de la siguiente manera:

 data class C(val a: String, val b: String, val c: String) open class A(val c:C) class B(c:C, val d: String) : A(c) 

SI encontró que B no es-A A , entonces debe usar composition en lugar de inheritance, por ejemplo:

 open class A (a: String, b: String, c: String) class B(val a:A, val d: String) 

No, no hay tal manera. Desafortunadamente, debes hacer esto manualmente

  • Error en android studio 3.0 cuando sincronizo gradle. Error: Causa: no se puede encontrar una ruta de certificación válida para el objective solicitado
  • ¿Cómo se resuelve la violación de la restricción de límites finitos en Kotlin?
  • ¿Cuál es la mejor manera de definir la constante de logging de TAG en Kotlin?
  • La 'anulación' del modificador no es aplicable a 'getter'
  • ¿Por qué mi escena es nula?
  • ¿Cómo agregar sintéticamente actividad a la stack trasera antes de comenzar otra?
  • Asigna lambda directamente al método abstracto henetworkingado
  • El error "La variable debe inicializarse" al delegar en una propiedad inicializada
  • Cómo pasar el nombre de db en time de ejecución en kotlin
  • Kotlin: Cantidades masivas de ConsPStack, ¿cómo puedo evitar?
  • Kotlin: ¿Funciones de order superior para contar la cantidad de ocurrencias en una list?