شرح Java

الأنواع العامّة (Generics)

لماذا Generics؟

تتيح كتابة كود يعمل مع أي نوع مع الحفاظ على أمان النوع (يكشف الأخطاء وقت الترجمة).

رأيتها بالفعل: ArrayList<String> و HashMap<String, Integer>.

صنف عام

public class Box<T> {
  private T value;

  public void set(T value) { this.value = value; }
  public T get() { return value; }
}

الاستخدام:

Box<String> b1 = new Box<>();
b1.set("مرحبًا");
String s = b1.get();    // بلا تحويل، آمن

Box<Integer> b2 = new Box<>();
b2.set(42);

دالة عامّة

public static <T> void printArray(T[] arr) {
  for (T item : arr) {
    System.out.println(item);
  }
}

الحدود (Bounded)

تقييد النوع:

public static <T extends Number> double sum(T a, T b) {
  return a.doubleValue() + b.doubleValue();
}

الفائدة

  • أمان النوع: خطأ النوع يُكشف وقت الترجمة لا التشغيل.
  • إعادة الاستخدام: كود واحد لكل الأنواع.
  • بلا تحويل (casting): المترجم يعرف النوع.

🎯 التالي: التعبيرات اللامية والبرمجة الدالية.