0%
الفئات المختومة: إغلاق التسلسل الهرمي عن قصد

الفئات المختومة

إعلان القائمة الكاملة للتنفيذات، وما يفعله المترجم بها.

10-15 دقيقة

الفئات المختومة: إغلاق التسلسل الهرمي عن قصد

في Java 8 لا يملك التسلسل الهرمي إلا حالتين: مفتوح أو مغلق. تعلن واجهة MoyenPaiement، فيستطيع أي شخص، في أي وحدة (module)، أن ينفّذها، بما في ذلك بثوابت (invariants) لم تكن تتوقعها. أو تضع final على فئة، فلا يعود بإمكان أحد أن يشتق منها شيئًا. وبين الحالتين لا شيء. ومع ذلك فإن معظم النماذج الوظيفية تريد الحل الوسط تمامًا: الدفع إما بطاقة أو تحويل أو شيك، وهذه القائمة كاملة، ولا ينبغي لطرف ثالث أن يضيف إليها.

وثمن غياب هذا الخيار يُدفع عند كل switch. تكتب سلسلة من instanceof، وتنهيها بـ else { throw new IllegalStateException("type inconnu"); }، وأنت تعلم أن هذا الفرع ميت، إلى أن يضيف زميل تنفيذًا رابعًا. المترجم لا يقول شيئًا، لأنه لا يعرف عدد التنفيذات. فتكتشف السهو في بيئة الإنتاج على هيئة استثناء. الفئة المختومة تنقل هذا الاكتشاف إلى وقت الترجمة: فهي تعطي المترجم القائمة الشاملة للأنواع الفرعية، فيصبح قادرًا على إخبارك بالحالة التي نسيتها.

الصيغة

public sealed interface MoyenPaiement
        permits CarteBancaire, Virement, Cheque { }

public record CarteBancaire(String numeroMasque, YearMonth expiration)
        implements MoyenPaiement { }

public record Virement(String iban, String beneficiaire)
        implements MoyenPaiement { }

public record Cheque(String numero, String banque)
        implements MoyenPaiement { }

التعليقات

التعليقات مدعومة عبر GitHub Discussions

سجّل الدخول باستخدام GitHub للمشاركة في النقاش

تم نسخ الرابط!