Language Orta

Varsayılan olmadan kapsamlı switch

Derleyici tüm sealed alt türlerin kapsandığını doğrular — default gerekmez.

✕ Java 8
// Must add default even though
// all cases are covered
double area(Shape s) {
    if (s instanceof Circle c)
        return Math.PI * c.r() * c.r();
    else if (s instanceof Rect r)
        return r.w() * r.h();
    else throw new IAE();
}
✓ Java 21+
// sealed Shape permits Circle, Rect
double area(Shape s) {
    return switch (s) {
        case Circle c ->
            Math.PI * c.r() * c.r();
        case Rect r ->
            r.w() * r.h();
    }; // no default needed!
}
Bu kodda bir sorun mu gördünüz? Bize bildirin.

Derleme zamanı güvenliği

Yeni bir alt tür ekleyin ve derleyici güncellenecek her yeri gösterir.

🚫

Ölü kod yok

Hataları gizleyen erişilemeyen varsayılan dal yoktur.

📐

Cebirsel türler

sealed + record'lar + kapsamlı switch = Java'da uygun ADT'ler.

Eski Yaklaşım
Zorunlu default
Modern Yaklaşım
sealed Kapsamlılığı
JDK'dan itibaren
21
Zorluk
Orta
Varsayılan olmadan kapsamlı switch
Mevcut

JDK 21 LTS'den itibaren geniş çapta kullanılabilir (Eylül 2023)

Sealed bir türde switch kullandığınızda, derleyici tüm olası alt türleri bilir ve her durumun işlendiğini doğrular. Yeni bir alt tür eklerseniz, derleyici artık eksik olan her switch'i işaretler.

Paylaş 𝕏 🦋 in