0Pricing
Java Academy · درس

جملة permits

سرد الأنواع الفرعية المسموح بها

جملة permits درس مجاني في Java Academy على CoddyKit. هذا هو الدرس 2 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Java Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Java Academy 4 دروس في المجموع.

بند permits

يوضح بند permits كيفية تسمية النوع sealed لأنواعه الفرعية المسموح بها. ويأتي مباشرةً بعد اسم النوع والكلمة المفتاحية permits.

الصياغة الأساسية

اسرد الأنواع الفرعية المسموح بها، وافصل بينها بفواصل بعد permits.

public class Main {
    sealed interface Vehicle permits Car, Truck, Motorcycle {}
    record Car() implements Vehicle {}
    record Truck() implements Vehicle {}
    record Motorcycle() implements Vehicle {}

    public static void main(String[] args) {
        Vehicle v = new Truck();
        System.out.println(v.getClass().getSimpleName());
    }
}

تنفيذ العقد

يجب على كل نوع فرعي مُسمّى أن يستخدم فعليًا implements (للواجهات) أو extends (للفئات) مع النوع sealed. ويؤدي تسمية فئة في permits لا تفعل ذلك إلى خطأ في التصريف.

حذف permits

إذا عُرّفت جميع الأنواع الفرعية المسموح بها في الملف نفسه الذي عُرّف فيه النوع sealed، فيمكنك حذف permits بالكامل. ويستنتج المصرّف القائمة تلقائيًا.

public class Main {
    sealed interface Status {}
    record Active() implements Status {}
    record Inactive() implements Status {}

    public static void main(String[] args) {
        Status s = new Active();
        System.out.println(s.getClass().getSimpleName());
    }
}

متى يكون permits مطلوبًا

إذا كانت الأنواع الفرعية موجودة في ملفات منفصلة ضمن الحزمة أو الوحدة نفسها، فيجب إدراجها صراحةً في permits. فلا يستطيع المصرّف الاستنتاج عبر الملفات.

الترتيب غير مهم

لا يحمل ترتيب الأسماء في permits أي معنى دلالي. فهو لا يؤثر في سلوك switch أو في أي شيء آخر؛ بل هو مجرد قائمة بالأنواع المسموح بها.

تسلسل هرمي للفئات باستخدام permits

يعمل البند نفسه مع الفئات sealed التي تتضمن سلوكًا مجردًا.

public class Main {
    sealed static abstract class Node permits Leaf, Branch {
        abstract int size();
    }
    static final class Leaf extends Node {
        int size() { return 1; }
    }
    static final class Branch extends Node {
        final Node a, b;
        Branch(Node a, Node b) { this.a = a; this.b = b; }
        int size() { return a.size() + b.size(); }
    }

    public static void main(String[] args) {
        Node tree = new Branch(new Leaf(), new Branch(new Leaf(), new Leaf()));
        System.out.println("Leaves: " + tree.size());
    }
}

نسيان نوع فرعي

إذا نفّذت فئة الواجهة sealed لكنها لم تُدرج في permits، يفشل التصريف مع رسالة تفيد بأن الفئة غير مسموح لها بتوسيع النوع sealed.

الأنواع المسموح بها معلومة للجميع

تُعدّ قائمة permits جزءًا من عقد النوع، وتُسجّل في ملف الفئة. ويمكن للأدوات والمصرّف قراءتها لمعرفة المجموعة الكاملة للأنواع الفرعية.

المزج بين الأبناء final وsealed

يمكن لقائمة permits أن تمزج بين المُعدّلات: بعض الأبناء final، وبعضها الآخر sealed لمواصلة التسلسل الهرمي إلى مستويات أعمق.

public class Main {
    sealed interface Shape permits Circle, Polygon {}
    record Circle(double r) implements Shape {}
    sealed interface Polygon extends Shape permits Triangle, Rectangle {}
    record Triangle() implements Polygon {}
    record Rectangle() implements Polygon {}

    public static void main(String[] args) {
        Shape s = new Triangle();
        System.out.println(s instanceof Polygon);
    }
}

أفضل الممارسات

أبقِ النوع sealed وأنواعه الفرعية متقاربةً لتسهيل القراءة. ويُفضّل حذف permits في التسلسلات الهرمية الصغيرة الموجودة في ملف واحد، وإدراجه صراحةً عند تقسيم الملفات.

تحقق سريع

اختبر مدى فهمك لبند permits.

مراجعة

تعلّمت بند permits.

  • يسرد الأنواع الفرعية المسموح بها بعد اسم النوع sealed.
  • يجب على كل نوع مُدرج أن يوسّع النوع sealed أو ينفّذه.
  • يمكن حذفه عندما تشترك جميع الأنواع الفرعية في الملف نفسه.
  • يمكن أن تكون الأنواع الفرعية نفسها sealed لمواصلة التسلسل الهرمي.

الأسئلة الشائعة

هل درس «جملة permits» مجاني؟

نعم — نص درس «جملة permits» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Java Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Java Academy 4 دروس في المجموع.

ماذا ستتعلم في «جملة permits»؟

سرد الأنواع الفرعية المسموح بها تتمرن على Java Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ Java Academy؟

لا تُشترط خبرة سابقة. Java Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 2 من أصل 4.

كم من الوقت يستغرق درس «جملة permits»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس Java Academy هذا؟

نعم. كل درس في Java Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. التصريح بالأنواع المختومة
  2. جملة permits
  3. الأنواع المختومة مع Records
  4. التبديل الشامل على نوع مختوم
← العودة إلى Java Academy