Расширение класса с множеством параметров

У меня есть класс под названием A:

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

И класс B, который расширяет A:

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

Мой вопрос в том, есть ли способ сделать что-то подобное, чтобы не объявлять все параметры A внутри конструктора B:

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

Если нет, должно быть =)

Solutions Collecting From Web of "Расширение класса с множеством параметров"

Вы можете создать общий интерфейс для классов, а затем использовать делегацию, чтобы приблизиться к тому, что вы хотите. Как это:

 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 

Сделав это, вы можете создать экземпляр B следующим образом:

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

Нет , Kotlin не содержит никакой конструкции, которая позволяет упростить параметры конструктора, соответствующие параметрам суперкласса.

Я не думаю, что согласен с тем, что это должна быть особенность языка, но я бы рекомендовал начать разговор на YouTrack, если вы считаете, что это должно быть.

Когда вы сталкиваетесь с этой проблемой, вы должны спросить себя, почему такой класс нуждается во многих параметрах / зависимостях, а не в поиске решения по синтаксису языка. Может быть, его ответственность неясна.

ЕСЛИ существует много доменных понятий, смешанных в классе, тогда вам необходимо пересмотреть свои классы, как показано ниже:

 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) 

ЕСЛИ вы нашли B not is-A A , тогда вы должны использовать композицию, а не наследование, например:

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

Нет, нет такого пути. К сожалению, вам нужно сделать это вручную