Sealed クラスは、Java 15 でプレビュー機能として導入され、Java 17 で永続化され、開発者がどのクラスを拡張または実装できるかを制御できるようになります。この機能は、小さくても強力な機能で Java 言語を強化することで開発者の生産性を向上させることを目的とした Project Amber の一部です。
Sealed クラスは、他のどのクラスやインターフェイスが拡張または実装できるかを制限する新しい種類のクラスです。これは、より堅牢で保守しやすい型階層を提供するために行われます。シールされたクラスを定義するときは、許可されるサブクラスのセットを指定します。
シールされたクラスを定義するには、sealed キーワードを使用し、permits 句で許可されたサブクラスを指定します。以下に例を示します:
public sealed class Shape permits Circle, Rectangle, Square { // class body } public final class Circle extends Shape { // class body } public final class Rectangle extends Shape { // class body } public final class Square extends Shape { // class body }
この例では、Shape はシールされたクラスであり、Circle、Rectangle、Square のみがそれを拡張できます。各サブクラスは、final、sealed、または non-sealed である必要があります。
Sealed クラスは、サブクラスのセットが既知で固定されている階層構造をモデル化するために使用できます。これは、ドメイン モデリングや代数データ型を扱う場合に特に役立ちます。
パターン マッチングでシールされたクラスを使用する例を次に示します:
public class SealedClassExample { public static void main(String[] args) { Shape shape = new Circle(5); String result = switch (shape) { case Circle c -> "Circle with radius " c.radius(); case Rectangle r -> "Rectangle with width " r.width() " and height " r.height(); case Square s -> "Square with side " s.side(); }; System.out.println(result); } }
この例では、switch 式を使用してさまざまなタイプの Shape を処理します。 Shape がシールされているため、コンパイラは考えられるすべてのケースがカバーされていることを確認できます。
Sealed クラスは Java への強力な追加機能であり、クラス階層の制御を改善し、コードの可読性と保守性を向上させます。シールされたクラスを使用すると、Java アプリケーションでより堅牢で明確に定義された型システムを作成できます。
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3