1. 概要

このクイックチュートリアルでは、Kotlinで特定の封印されたクラスのすべてのサブクラスを見つける方法を学習します。

2. 封印されたクラスのサブクラスの取得

ご存知のように、封印されたクラスとインターフェースは、単純な制限のある継承階層です。同じパッケージ内のクラスとインターフェースのみがそれらを拡張できます。 したがって、特定の封印されたクラスのすべてのサブクラスは、コンパイル時に認識されます。

例として、クラスの単純な階層を考えてみましょう。

sealed class Expr(val keyword: String)
class ForExpr : Expr("for")
class IfExpr : Expr("if")
class WhenExpr : Expr("when")
class DeclarationExpr : Expr("val")

ここでは、4つの具体的な拡張機能を備えた1つの封印されたクラスがあります。

Kotlin 1.3以降、封印されたクラスのすべてのサブクラスを検索するために、sealedSubclassesプロパティを使用できます。

val subclasses: List<KClass<*>> = Expr::class.sealedSubclasses

assertThat(subclasses).hasSize(4)
assertThat(subclasses).containsExactlyInAnyOrder(
  ForExpr::class, IfExpr::class, WhenExpr::class, DeclarationExpr::class
)

上に示したように、私たちは見つける必要があります KClass スーパークラスの封印されたサブクラスその上のプロパティ。 ここでは、Exprスーパークラスのサブクラスが4つあることも確認しています。

3. 結論

このチュートリアルでは、Kotlinで特定の封印されたクラスのサブクラスを見つける方法を学びました。

いつものように、すべての例はGitHubから入手できます。