Kurt Renzo Acosta
09/17/2020, 10:44 AMdata class Model(
val a: String,
val b: String,
val nullableOnlyForStateA: String?,
val state: State,
val propForStateA: String?,
val propForStateB: String?
)
I’m trying to use sealed classes to make it more idiomatic but it seems too verbose:
sealed class Model {
abstract val a: String
abstract val b: String
abstract val nullableOnlyForStateA: String?
data class A(
override val a: String,
override val b: String,
override val nullableOnlyForStateA: String?,
val propForStateA: String
) : Model()
data class B(
override val a: String,
override val b: String,
override val nullableOnlyForStateA: String,
val propForStateB: String
) : Model()
}
This seems okay but my original class has much more properties and more states making a 16-line data class turn into a more-than-100 line sealed class. Any ideas on how to make this more ergonomic?Michael de Kaste
09/17/2020, 11:34 AMKurt Renzo Acosta
09/17/2020, 12:27 PMoverride
statementsNir
09/17/2020, 12:37 PMNir
09/17/2020, 12:38 PMNir
09/17/2020, 12:38 PMNir
09/17/2020, 12:38 PMNir
09/17/2020, 12:39 PMMichael de Kaste
09/17/2020, 12:40 PMKurt Renzo Acosta
09/17/2020, 12:54 PMfun DataModel.toDomainModel() = when(state) {
Case1 -> Case1DomainModel(...)
Case2 -> Case2DomainModel(...)
...
}
Kurt Renzo Acosta
09/17/2020, 12:57 PMNir
09/17/2020, 12:58 PMNir
09/17/2020, 12:59 PMKurt Renzo Acosta
09/17/2020, 12:59 PMCase1DomainModel(field1 = field1, field2 = field2, …
and extra cases omitted for brevityNir
09/17/2020, 12:59 PMNir
09/17/2020, 1:00 PMNir
09/17/2020, 1:03 PMNir
09/17/2020, 1:03 PMKurt Renzo Acosta
09/17/2020, 1:03 PMNir
09/17/2020, 1:04 PMKurt Renzo Acosta
09/17/2020, 1:04 PM