Language 中級

型を拡張できるクラスを制限し、網羅的なswitchを可能にする。

✕ Java 8
// Anyone can extend Shape
public abstract class Shape { }
public class Circle extends Shape { }
public class Rect extends Shape { }
// unknown subclasses possible
✓ Java 17+
public sealed interface Shape
    permits Circle, Rect {}
public record Circle(double r)
    implements Shape {}
public record Rect(double w, double h)
    implements Shape {}
このコードに問題がありますか? お知らせください。
🏰

制御された継承

許可されたサブタイプのみが拡張可能 — 想定外のサブクラスはありません。

網羅的なマッチング

コンパイラがすべてのケースをカバーしているか検証 — defaultが不要になります。

🧩

代数的データ型

sum型を自然に表現できます — sealed + records = JavaのADT。

旧来のアプローチ
オープンな継承階層
モダンなアプローチ
sealed permits
JDKバージョン
17
難易度
中級
型階層のためのsealed クラス
利用可能

JDK 17 LTS(2021年9月)以降、広く利用可能

sealedクラスはサブタイプの閉じた集合を定義します。コンパイラはすべてのケースを把握しているため、defaultブランチなしで網羅的なパターンマッチングが可能です。レコードと組み合わせることで代数的データ型をモデル化できます。

共有 𝕏 🦋 in