ホームページ >Java >&#&チュートリアル >Kotlin シールド クラス vs. Java Enum (およびシールド インターフェイス!): 限定された階層の物語

Kotlin シールド クラス vs. Java Enum (およびシールド インターフェイス!): 限定された階層の物語

Patricia Arquette
Patricia Arquetteオリジナル
2024-11-27 07:16:13443ブラウズ

Kotlin Sealed Classes vs. Java Enums (and Sealed Interfaces!): A Tale of Limited Hierarchies

あなたが王令を持った王であると想像してください。あなたは、特定の個人のみが王位を継承でき、他の者は継承できないと宣言したいと考えています。プログラミングの世界では、それは一種の封印されたクラスのようなものです。これは階層を制限し、特定のサブクラスのセットのみが存在できるようにします。 ?

Java: Enum 王国

Java には列挙型があります。列挙型は、固定の定数セットを表す特別なタイプのクラスです。彼らは王宮のようなもので、各メンバーには特定の役割があり、新しいメンバーを追加する可能性はありません。

// Java
public enum RoyalTitle {
    KING,
    QUEEN,
    PRINCE,
    PRINCESS
}

列挙型は、限られたオプションのセットを表すのに最適ですが、クラスのような柔軟性がありません。新しいメンバーを追加したり、追加の動作でメンバーを拡張したりすることはできません。それは、新しい肩書きや役割が入る余地のない厳格な法廷構造を持つようなものです。 ?

Kotlin: 封印されたクラス王朝

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 クラスにはいくつかの利点があります。

  • 制御された継承: 意図しないサブクラスが作成されるのを防ぎ、型の安全性を確保します。
  • 網羅的な when ステートメント: シールされたクラスで when 式を使用する場合、コンパイラーは考えられるすべてのサブクラスをカバーしているかどうかをチェックして、エラーを防ぐことができます。
  • 柔軟性: サブクラスはさまざまなプロパティと動作を持つことができ、列挙型よりも表現力が高くなります。

Java の対応物: Sealed Interface (Java 17)

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。