Language متوسط

يتحقق المترجم من تغطية جميع الأنواع الفرعية المُغلقة — لا حاجة لـ default.

✕ 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!
}
هل ترى مشكلة في هذا الكود؟ أخبرنا.

أمان وقت الترجمة

أضف نوعاً فرعياً جديداً والمترجم يُظهر كل مكان يحتاج تحديثاً.

🚫

لا كود ميت

لا فرع default غير قابل للوصول يُخفي الأخطاء.

📐

أنواع جبرية

مُغلق + records + switch شامل = أنواع ADT صحيحة في Java.

الأسلوب القديم
default إلزامي
الأسلوب الحديث
شمولية الأنواع المُغلقة
منذ JDK
21
الصعوبة
متوسط
switch شامل بدون default
متاح

متاح على نطاق واسع منذ JDK 21 LTS (سبتمبر 2023)

عند التبديل على نوع مُغلق يعرف المترجم جميع الأنواع الفرعية الممكنة ويتحقق من معالجة كل حالة. إذا أضفت نوعاً فرعياً جديداً يُبيّن المترجم كل switch لم يعد مكتملاً.

مشاركة 𝕏 🦋 in