Как смешивать несколько конструкторов родительского класса с val в дочернем классе

Предположим, что у меня есть класс Parent, который имеет четыре поля A, B, C и D, такие, что C и D опционально передаются или инициализируются с помощью реализаций по умолчанию:

open class Parent(val a: A, val b: B, val c: C, val d: D) { constructor(a: A, b: B, c: C): this(a, b, c, DImpl()){} constructor(a: A, b: B): this(a, b, CImpl(), DImpl()){} } 

Мне нужно расширить этот класс и добавить еще одно поле в дочерний класс:

 class Child: Parent { val e: E // How do I initialize this? } 

Передача val во вспомогательный конструктор не работает, и он также не использует блок init{} .

Передача val в первичный конструктор может работать, но затем я теряю делегацию во вторичных конструкторах класса Parent – мне нужно использовать все конструкторы Parent со всеми параметрами или дублировать вторичные конструкторы, пропуская детали реализации для класса Child ,

Это должно быть просто, я что-то пропустил?

Если вам нужно использовать вторичные конструкторы и не можете использовать значения по умолчанию, как было предложено @Ingo Kegel, вы можете инициализировать поле e точно так же, как это было бы сделано в Java, назначив значение параметра для свойства:

 class Child: Parent { val e: E constructor(a: A, b: B, c: C, d: D, e: E) : super(a, b, c, d) { this.e = e } } 

Вы можете использовать значения по умолчанию вместо вторичных конструкторов:

 open class Parent(val a: A, val b: B, val c: C = CImpl(), val d: D = DImpl()) class Child(a: A, b: B, val e: E): Parent(a, b) 
Intereting Posts
Как отфильтровать список на месте с Kotlin? Как проверить, отсортирован ли массив строк в алфавитном порядке или нет с помощью Kotlin? Kotlin добавляет пользовательский прослушиватель для доступа к виджетам на Android Способы запутывания доступа к привилегированным частным, но на самом деле публичным членам класса для использования их в встроенных методах Проблемы подтипа с дженериками в Котлине Конфигурация «compile» in устарела, но все конфигурации – это «реализация», Kotlin Coroutines с таймаутом Как обходить NetworkOnMainThreadException на Kotlin Android – Trigger MainActivity, чтобы сделать что-то из пользовательского вида Переменная Assert не Null Инициализация Kotlin val, когда Как добавить содержимое одной коллекции в новую коллекцию Как установить нижнюю границу для FAB в макете Anko DSL? Как передать массив объектов с Android на React Native? Невозможно установить Content-Type в запросе SOAP