العودة إلى الدورة

أمان النوع باستخدام الأنواع العامة Generics (<T>)

إتقان لغة Java: من الصفر إلى مطور محترف (رحلة من 50 درساً)

الدرس 40: أمان النوع باستخدام الأنواع العامة (<T>)

تم تقديم الأنواع العامة (Generics) في Java 5 لتوفير أمان النوع في وقت التجميع. وهي تسمح للفئة أو الدالة بالعمل على كائنات من أنواع مختلفة مع الاحتفاظ بإمكانيات التحقق من النوع.

1. المشكلة التي تحلها Generics

قبل التقديم، كانت المجموعات تخزن الكائنات كنوع Object أساسي. وهذا يعني أن المترجم لم يستطع التحقق من النوع المخزن، مما أدى إلى احتمال حدوث أخطاء ClassCastException عند وقت التشغيل.

java // قبل Generics (سيء): List names = new ArrayList(); names.add("Alice"); names.add(10); // يسمح المترجم بذلك، لكنه سيسبب عطلاً لاحقاً

String name = (String) names.get(0);

2. استخدام Generics

نحدد النوع داخل أقواس زاوية (<Type>) عند تعريف المجموعة. غالباً ما يتم تمثيل معلمة النوع بـ T (Type) أو E (Element).

java // مع Generics (جيد): List names = new ArrayList<>(); // القائمة يمكنها فقط حمل نصوص names.add("Bob"); // names.add(10); // خطأ في التجميع! التحقق من النوع يمنع الخطأ

String name = names.get(0); // لا حاجة للتحويل (casting)

3. إنشاء فئة عامة

يمكنك جعل فئاتك الخاصة عامة عن طريق إضافة معلمة نوع إلى تصريح الفئة.

java public class Box { private T item;

public void setItem(T item) {
    this.item = item;
}

public T getItem() {
    return item;
}

}

مفهوم رئيسي (Erasure): يتم تنفيذ Generics في Java باستخدام محو النوع (type erasure). في وقت التشغيل، تتم إزالة معلمات النوع لضمان التوافق مع الإصدارات القديمة.