Authors Top

If you have a few years of experience with the Kotlin language and server-side development, and you’re interested in sharing that experience with the community, have a look at our Contribution Guidelines.

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<T> of the superclass and then use the sealedSubclasses property on it. Here, we’re also verifying that there are four subclasses of the Expr superclass.

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.

Authors Bottom

If you have a few years of experience with the Kotlin language and server-side development, and you’re interested in sharing that experience with the community, have a look at our Contribution Guidelines.

Comments are closed on this article!