'Kotlin pass through constructor parameters to parent without declaring in child

My use case: I have a large number of POJO models that are different types of requests for a third-party API. All of them have several common fields and a couple unique ones.

I was hoping to build something that conceptually looks like this

class RequestBase(
  val commonField1: String,
  val commonField2: String,
  ...
  val commonFieldX: String
)

class RequestA(
  val uniqueFieldA: String
): RequestBase()

class RequestB(
  val uniqueFieldB: String
): RequestBase()

fun main() {
  val requestA = RequestA(
    commonField1 = "1",
    commonField2 = "2",
    ...
    uniqueFieldA = "A"
  )
}

I can of course override the common fields in every child request and then pass them to the parent constructor, but this ends up producing a lot of boilerplate code and bloats the model. Are there any options I can explore here?



Solution 1:[1]

You can't do it with constructors of base class. Without constructors it's possible:

open class RequestBase {
    lateinit var commonField1: String
    lateinit var commonField2: String
    ...
    lateinit var commonFieldX: String
}

class RequestA(
    val uniqueFieldA: String
): RequestBase()

class RequestB(
    val uniqueFieldB: String
): RequestBase()

fun main() {
    val requestA = RequestA(
        uniqueFieldA = "A"
    ).apply {
        commonField1 = "1"
        commonField2 = "2"
        ...
        commonFieldX = "X"
    }
}

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Nikolai Shevchenko