1. Overview
In this quick tutorial, we’re going to learn how to find all subclasses of a particular sealed class in Kotlin.
2. Getting Subclasses of a Sealed Class
As we know, sealed classes and interfaces are inheritance hierarchies with a simple restriction: Only classes and interfaces in the same package can extend them. Therefore, all the subclasses of a particular sealed class are known at compile-time.
Let’s consider a simple hierarchy of classes as an example:
sealed class Expr(val keyword: String)
class ForExpr : Expr("for")
class IfExpr : Expr("if")
class WhenExpr : Expr("when")
class DeclarationExpr : Expr("val")
Here, we have one sealed class with four concrete extensions.
As of Kotlin 1.3, in order to find all subclasses of a sealed class, we can use the sealedSubclasses property:
val subclasses: List<KClass<*>> = Expr::class.sealedSubclasses
assertThat(subclasses).hasSize(4)
assertThat(subclasses).containsExactlyInAnyOrder(
ForExpr::class, IfExpr::class, WhenExpr::class, DeclarationExpr::class
)
As shown above, we have to find the KClass
3. Conclusion
In this tutorial, we learned how to find the subclasses of a particular sealed class in Kotlin.
As usual, all the examples are available over on GitHub.