الدرس 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
String name = names.get(0); // لا حاجة للتحويل (casting)
3. إنشاء فئة عامة
يمكنك جعل فئاتك الخاصة عامة عن طريق إضافة معلمة نوع إلى تصريح الفئة.
java
public class Box
public void setItem(T item) {
this.item = item;
}
public T getItem() {
return item;
}
}
مفهوم رئيسي (Erasure): يتم تنفيذ Generics في Java باستخدام محو النوع (type erasure). في وقت التشغيل، تتم إزالة معلمات النوع لضمان التوافق مع الإصدارات القديمة.