PoisonedYouth
02/14/2024, 11:22 AMsealed interface Foo {
val name: String
}
data class Bar(override val name: String, val age: Int) : Foo
data class Baz(override val name: String, val eyeColor: String) : Foo
data class Bit(override val name: String, val salary: Double) : Foo
fun main() {
val newName = "New Name"
val updatedFoo = when (val foo = getFoo()) {
is Bar -> {
foo.copy(
name = newName,
age = 15,
)
}
is Baz -> {
foo.copy(
name = newName,
eyeColor = "blue",
)
}
is Bit -> {
foo.copy(
name = newName,
salary = 2.499
)
}
}
println(updatedFoo)
}
Sam
02/14/2024, 11:39 AMYoussef Shoaib [MOD]
02/14/2024, 1:22 PMcopy
method with default arguments in the sealed interface, and implement it in each class. You'd then end up doing 2 copies, which isn't going to be that expensive I don't think.