الانتقال إلى المحتوى الرئيسي
الوحدة 6 · الدرس 2 من 212/14 في الدورة~15 min
دروس الوحدة (2/2)

الأدوية العامة في جافا

تم تقديم الأنواع العامة (الأنواع العامة) في Java للسماح للفئات والواجهات والأساليب بالعمل على أنواع مختلفة كمعلمات. وهذا يضمن سلامة نوع وقت الترجمة ويتجنب القوالب الصريحة باهظة الثمن في وقت التشغيل.

فئات عامة

يتم تعريف الفئة العامة باستخدام الأقواس الزاوية <T> حيث يعمل T كعنصر نائب للنوع الذي سيتم تحديده عند إنشاء مثيل للفئة.

Java
public class Box<T> {
    private T content;

    public void setContent(T content) {
        this.content = content;
    }

    public T getContent() {
        return content;
    }
}

عند إنشاء كائن Box، نحدد النوع الفعلي:

Java
Box<Integer> integerBox = new Box<>();
integerBox.setContent(123);
int value = integerBox.getContent(); // No cast needed!

طرق عامة

يمكنك تحديد طريقة عامة واحدة يمكنها قبول معلمات نوع مختلفة. يتم وضع معلمة النوع قبل نوع الإرجاع للطريقة.

Java
public static <E> void printArray(E[] elements) {
    for (E element : elements) {
        System.out.println(element);
    }
}

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

يمكننا تقييد الأنواع المقبولة بواسطة عام باستخدام الكلمة الأساسية extends (الحد الأعلى) لقبول نوع معين أو فئاته الفرعية.

Java
public static <T extends Number> void processNumber(T number) {
    // Accepts Integer, Double, Float, etc.
    System.out.println(number.doubleValue());
}

جربه بنفسك

تمرين#java.m6.l2.e1
المحاولات: 0جارٍ التحميل…

أكمل مربع الفئة العامة عن طريق تحديد getValue() getter الذي يُرجع T وsetter setValue(T value) الذي يعين قيمة المتغير الخاص.

جارٍ تحميل المحرر…
إظهار التلميح

اكتب الطرق بالتوقيع الصحيح باستخدام معلمة النوع العامة `T`.

الحل متاح بعد 3 من المحاولات

تمرين#java.m6.l2.e2
المحاولات: 0جارٍ التحميل…

قم بإنشاء طريقة عامة ثابتة printArray تأخذ مصفوفة من النوع T[] مصفوفة مسماة وتطبع كل عنصر باستخدام حلقة for-each.

جارٍ تحميل المحرر…
إظهار التلميح

يجب وضع معلمة النوع `<T>` مباشرة بعد `static` وقبل نوع الإرجاع `void`.

الحل متاح بعد 3 من المحاولات

تمرين#java.m6.l2.e3
المحاولات: 0جارٍ التحميل…

قم بإنشاء فئة ثابتة StringContainer تقوم بتنفيذ واجهة الحاوية ذات المعلمات باستخدام String. حدد المُنشئ الذي يأخذ معلمة سلسلة وقم بتنفيذ طريقة getItem().

جارٍ تحميل المحرر…
إظهار التلميح

استبدل النوع العام `T` بـ `String` في توقيع الفئة وفي نوع الإرجاع لـ `getItem()`.

الحل متاح بعد 3 من المحاولات