Tür hiyerarşileri için sealed sınıflar
Hangi sınıfların bir türü genişletebileceğini kısıtlayın — kapsamlı switch'leri etkinleştirin.
Kod Karşılaştırması
✕ 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 {}
Bu kodda bir sorun mu gördünüz? Bize bildirin.
Modern yöntem neden daha iyi
Kontrollü hiyerarşi
Yalnızca izin verilen alt türler genişletebilir — sürpriz alt sınıf yok.
Kapsamlı eşleştirme
Derleyici switch'in tüm durumları kapsadığını doğrular, default gerekmez.
Cebirsel veri türleri
Sum türlerini doğal olarak modelleyin — sealed + record'lar = Java'da ADT'ler.
Eski Yaklaşım
Açık Hiyerarşi
Modern Yaklaşım
sealed permits
JDK'dan itibaren
17
Zorluk
Orta
JDK Desteği
Tür hiyerarşileri için sealed sınıflar
Mevcut
JDK 17 LTS'den itibaren geniş çapta kullanılabilir (Eylül 2021)
Nasıl çalışır
Sealed sınıflar, kapalı bir alt tür kümesi tanımlar. Derleyici tüm olası durumları bilir ve varsayılan bir dal olmadan kapsamlı kalıp eşleştirmeyi etkinleştirir. Record'larla birleştirildiğinde cebirsel veri türlerini modeller.
İlgili Belgeler