あなたが王令を持った王であると想像してください。あなたは、特定の個人のみが王位を継承でき、他の者は継承できないと宣言したいと考えています。プログラミングの世界では、それは一種の封印されたクラスのようなものです。これは階層を制限し、特定のサブクラスのセットのみが存在できるようにします。 ?
Java には列挙型があります。列挙型は、固定の定数セットを表す特別なタイプのクラスです。彼らは王宮のようなもので、各メンバーには特定の役割があり、新しいメンバーを追加する可能性はありません。
// Java public enum RoyalTitle { KING, QUEEN, PRINCE, PRINCESS }
列挙型は、限られたオプションのセットを表すのに最適ですが、クラスのような柔軟性がありません。新しいメンバーを追加したり、追加の動作でメンバーを拡張したりすることはできません。それは、新しい肩書きや役割が入る余地のない厳格な法廷構造を持つようなものです。 ?
Kotlin では、サブクラスの制限された階層を定義できるシールド クラスが導入されています。シールされたクラスと同じファイル内で定義されたサブクラスのみが、シールされたクラスから継承できます。それは、国王が王位に就く資格のある特定の個人を宣言するようなものです。
// Kotlin sealed class RoyalTitle { object King : RoyalTitle() object Queen : RoyalTitle() data class Prince(val name: String) : RoyalTitle() data class Princess(val name: String) : RoyalTitle() }
Sealed クラスにはいくつかの利点があります。
Java は、列挙型の制限を認識し、Java 17 でシールド インターフェイスを導入しました。これにより、Kotlin のシールド クラスと同様に、許可されたサブクラスの制限されたセットを使用してインターフェイスを定義できます。
// Java public sealed interface RoyalTitle permits King, Queen, Prince, Princess {}
これにより、継承階層の制御を維持しながら、列挙型よりも柔軟性が高まります。ただし、これは Java ではまだ比較的新しい機能であり、Kotlin のシールされたクラスは、より簡潔な構文と when 式との統合を提供します。
Kotlin のシールされたクラスは、制限されたクラス階層を定義する強力な方法を提供し、Java 列挙型よりも高い柔軟性と型安全性を提供します。シールされたインターフェイスの追加により、Java が追いつきつつありますが、Kotlin のシールされたクラスは依然としてより成熟した表現力豊かなソリューションです。したがって、勅令によってコードを管理する準備ができている場合は、封印されたクラスの力を活用してください。 ?
追伸 まだ列挙型に依存している Java 開発者の方でも、心配する必要はありません。シールドされたインターフェイスをいつでも探索して、柔軟性を高めることができます。 Kotlin のシールド クラスほど威厳はないかもしれませんが、より制御された継承王国への一歩です。 ?
以上がKotlin シールド クラス vs. Java Enum (およびシールド インターフェイス!): 限定された階層の物語の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。