smallufo
08/19/2021, 3:40 PMsealed interface
implementations ? ( Maybe classes or objects )hho
08/19/2021, 3:55 PMephemient
08/19/2021, 4:14 PMval queue = ArrayDeque(T::class.sealedSubclasses)
generateSequence(queue::removeFirstOrNull).filter(mutableSetOf<KClass<*>>()::add).onEach { queue += it.sealedSubclasses }.toList()
as an easy way to achieve thatsmallufo
08/19/2021, 4:33 PMsealed interface MySealedInterface {
fun doSomething()
}
object Obj1 : MySealedInterface {
override fun doSomething() {
println("obj1 ")
}
}
object Obj2 : MySealedInterface {
override fun doSomething() {
println("obj2")
}
}
fun main() {
val queue = ArrayDeque(MySealedInterface::class.sealedSubclasses)
val impls = generateSequence(queue::removeFirstOrNull)
.filter(mutableSetOf<KClass<*>>()::add)
.onEach { queue += it.sealedSubclasses }
.toList()
impls.forEach { impl ->
impl.objectInstance!!.doSomething()
}
}
It seems working , at least for object
…
but it seems there is no easier way… (without reflections)
For example : MySealedInterface.objects
ephemient
08/19/2021, 5:07 PMMySealedInterface::class.sealedSubclasses
would work