ما هو raw type في Java Generics ولماذا يجب تجنبها؟
مرحباً بالجميع! أنا مطور Java مبتدئ، أدرس Generics ووجدت مفهوماً غريباً يسمى "raw type" (نوع خام). يبدو أنني أفهم أنه مرتبط بالأنواع العامة، لكنني لم أستوعب الجوهر تماماً.\n\nلنفترض أن لدي هذا الكود:\n\n```java\nList list = new ArrayList(); // هل هذا raw type؟\nlist.add("سلسلة");\nlist.add(123);\n```\n\nالمترجم يصدر تحذيراً، لكن الكود يعمل. يمكنني وضع أي شيء في القائمة. لكن إذا استخدمت نوعاً مع معاملات:\n\n```java\nList list2 = new ArrayList<>();\nlist2.add("سلسلة");\n// list2.add(123); // خطأ في الترجمة\n```\n\nفإن المترجم يرفض. ما الفرق؟ لماذا يعتبر raw type ممارسة سيئة؟ فالكود يعمل معه. سمعت أن raw types موجودة للتوافق العكسي، لكن لماذا استخدامها في الكود الجديد؟