Joshua Hansen
11/18/2022, 2:53 PMChris Lee
11/18/2022, 2:56 PMwhen(list.size()) {
1 -> doSingletonThing()
else -> doOtherThings() // should 0 be a special case?
}
Joshua Hansen
11/18/2022, 2:57 PMChris Lee
11/18/2022, 2:58 PMephemient
11/18/2022, 2:59 PMinterface DoThings {
fun doThingA()
fun doThingB()
}
class SingleDoThings(val item: T) { override ... }
class MultiDoThings(val items: List<T>) { override ... }
fun DoThings(items: List<T>): DoThings =
items.singleOrNull()?.let { SingleDoThings(it) }
?: MultiDoThings(items)
Kirill Grouchnikov
11/18/2022, 4:07 PMStephan Schröder
11/19/2022, 12:44 PMsealed class SomeThing {
abstract fun doSomething()
private data class Single(private val item:String): SomeThing() {
override fun doSomething() {
println("single item: $item")
}
}
private data class Multi(private val moreThanOneItem: List<String>): SomeThing() {
override fun doSomething() {
println("multiple items: $moreThanOneItem")
}
}
companion object {
fun new(items: List<String>): SomeThing = when(items.size) {
0 -> error("can't instanciate a SomeThing with an empty list")
1 -> SomeThing.Single(items.single())
else -> SomeThing.Multi(items)
}
}
}
here on Kotlin Playground: https://pl.kotl.in/bv-Rj9FgG