Tengo una Parent
clase que se extiende por una gran cantidad de niño y quiero evitar copiar el largo constructor en cada uno de ellos, ya que es siempre la misma.
open class Parent(arg1: Any, arg2: Any, arg3: Any...)
class ChildA(arg1: Any, arg2: Any, arg3: Any...): Parent(arg1, arg2, arg3...)
class ChildB(arg1: Any, arg2: Any, arg3: Any...): Parent(arg1, arg2, arg3...)
[...]
¿Hay una manera de heredar el constructor o tal vez una función implementada en el Parent
que se crea la instancia de una Child
clase?
Editar
Mi expectativa es implementar las Child
clases sin tener que definir su constructor. La razón es que tengo unos 15 Childs y cada parámetro tiene un valor opcional, por lo que el código resultante no es tan bonito.
Si es siempre el mismo (o sólo extendida), puede crear una clase para la celebración de los parámetros:
data class ConstructorParams(arg1: Any, arg2: Any, arg3: Any...)
open class Parent(params: ConstructorParams)
class ChildA(params: ConstructorParams) : Parent(params)
class ChildB(params: ConstructorParams, extraParam: Int) : Parent(params)
Se podría añadir a la misma una función de ayuda para evitar explícita ConstructorParams
cuando una instancia de la clase, pero tiene un equilibrio de rendimiento (aunque esta versión no funcionará para Child2
):
inline fun <reified T : Parent> create(arg1: Any, arg2: Any, arg3: Any...) =
T::class.primaryConstructor.call(ConstructorParams(arg1, arg2, ...))
create<Parent>(1, 2, "")