Generics في Java
سمِّ نوع العنصر داخل الأقواس الزاوية عندما تبني قائمة. في Bin.java أبقِ الفئة العامة Bin، استورد java.util.ArrayList، أنشئ ArrayList<String> names = new ArrayList<>();، أضف "oak"، واطبع names.get(0). جمّع بـjavac Bin.java وشغّل java Bin. يجب أن تعرض الشاشة oak. عرض ثانٍ يخزن قيمة Integer وهي 3 بنفس الأسلوب. اترك Lambda الاختياري للصفحة التالية. هذا الدرس قوائم مُنمّطة مع Generics، وليس وسائط سطر الأوامر args وليس مشروع Scanner صغيراً.
قائمة String مع type argument
افتح Bin.java. أبقِ اسم الفئة العامة Bin. احذف عروض وسائط البرنامج Flag المتبقية، ومطالبات Box Scanner المتبقية، وطباعات التجميع Build المتبقية، وتاريخ المجموعات Shelf المتبقي إن دفنت قصة Generics. البرنامج لا ينبغي أن ينتظر كتابة ولا يقرأ args.
أضف الاستيراد في الأعلى:
import java.util.ArrayList;
داخل Bin.main أنشئ قائمة عناصرها String:
ArrayList<String> names = new ArrayList<>();
الأقواس الزاوية بعد ArrayList تحمل type argument وهو String. الفراغ <> جانب new هو diamond — Java يملأ نفس النوع من اليسار. ثم خزّن كلمة واحدة واطبعها بالفهرس:
names.add("oak");
System.out.println(names.get(0));
get(0) يعيد String لأن القائمة أُعلنت بـString. الشاشة تعرض oak.
import java.util.ArrayList;
public class Bin {
public static void main(String[] args) {
ArrayList<String> names = new ArrayList<>();
names.add("oak");
System.out.println(names.get(0));
}
}
من المجلد الذي يحوي Bin.java شغّل javac Bin.java. عندما تتطابق الأقواس والأقواس الزاوية والفواصل المنقوطة، لا يكتب javac سطراً خاصاً به. ثم شغّل java Bin — وليس java Bin.java. أبقِ فئة عامة واحدة ليتطابق الاسم مع Bin.
امشِ التشغيل مرة واحدة. Java تبدأ عند Bin.main. القائمة مُنمّطة لـString. add يخزن "oak". get(0) يعيد تلك الكلمة. println يكتب oak. لا شيء يطبع args[0] من Flag. لا شيء ينتظر عند item:. لا شيء يطبع [oak, pine] إلا إذا شغّلت ملف Shelf قديماً.
انطق قاعدة المبتدئ وأنت تنظر إلى الشاشة: الأقواس الزاوية تسمّي نوع العنصر؛ diamond يكرره في new؛ get يعيد ذلك النوع. لا تخترع عروض Lambda في هذه الصفحة. Lambda ينتظر الدرس الاختياري التالي. لا تترك القائمة خامة كـArrayList names بلا type argument في ملف التعليم هذا.
إن ما زلت ترى oak من java Flag oak، فذلك كان وسائط برنامج. هنا oak عنصر في قائمة، وأمر التشغيل هو java Bin فقط. إن لم يجد javac عن ArrayList، تحقق من سطر الاستيراد.
قائمة Integer بنفس العادة
Generics ليست للكلمات فقط. أبقِ نفس الفئة العامة Bin. ابنِ قائمة قيم Integer:
ArrayList<Integer> nums = new ArrayList<>();
nums.add(3);
System.out.println(nums.get(0));
جمّع مجدداً بـjavac Bin.java وشغّل java Bin. الشاشة تعرض 3. type argument هو Integer لأن ArrayList يخزن كائنات، وInteger هو الشكل الكائني للأعداد الصحيحة في هذا الأسلوب المبتدئ. diamond ما زال ينسخ النوع من الجانب الأيسر.
import java.util.ArrayList;
public class Bin {
public static void main(String[] args) {
ArrayList<Integer> nums = new ArrayList<>();
nums.add(3);
System.out.println(nums.get(0));
}
}
امشِ التشغيل مرة واحدة. القائمة مُنمّطة لـInteger. add(3) يخزن القيمة. get(0) يعيدها. println يكتب 3. أبقِ العرضين كشكلين تعليميين. أولاً أثبت قائمة String. ثم أثبت قائمة Integer. يتشاركان الاستيراد وdiamond وadd وget(0).
إن كتبت ArrayList<String> ثم add(3)، يرفض javac عدم التطابق. إن كتبت ArrayList<Integer> ثم add("oak")، يرفض javac ذلك أيضاً. type argument عقد لما تحتفظ به القائمة.
عادات قائمة مُنمّطة
أبقِ type argument وdiamond معاً أثناء التمرين.
📊 عادات Generics لـ Bin
| Habit | Typed shape | Beginner check |
|---|---|---|
| Declare | ArrayList<String> names |
angle brackets name the element type |
| Create | new ArrayList<>() |
diamond copies the type from the left |
| Store String | names.add("oak") |
value matches String |
| Store Integer | nums.add(3) |
value matches Integer |
| Read | get(0) |
returns the declared element type |
Generics ليست Flag وليست Lambda
وسائط البرنامج ملأت String[] args من سطر التشغيل. Generics تسمّي نوع عنصر المجموعة التي تبنيها في الكود. Lambda يختصر بعض أشكال الاستدعاء في صفحة اختيارية لاحقة. لا تخلط هذه المهام الثلاث في ملف مبتدئ واحد اليوم.
oak في Bin قيمة مخزّنة في قائمة. oak بعد java Flag كانت وسيطاً. نفس الإملاء، مهمة مختلفة. إن بقي ملف Flag متبقٍ يحتاج كلمات على سطر الأوامر، اتركه كتاريخ وشغّل java Bin بلا كلمات إضافية.
بلا type argument، القائمة الخام تفقد العقد الواضح الذي يعلّمه هذا الدرس. أبقِ ArrayList<String> أو ArrayList<Integer> في العروض التي تحتفظ بها. أبقِ صيغة Lambda خارج هذه الصفحة حتى ذلك الدرس.
فحوص المجلد قبل Lambda
اعرض المجلد بعد تجميع ناجح. يجب أن ترى Bin.java وBin.class معاً. عدّل المصدر، احفظ، شغّل javac Bin.java، ثم java Bin. ملف .class قديم قد يعرض طباعة قديمة إن تخطيت التجميع بعد التعديل.
إن اشتكى javac من فئات عامة مكررة، أبقِ Bin فقط عامة. إن أظهرت الشاشة [oak] بدل oak، طبعت القائمة كاملة بدل get(0) — أبقِ طباعة التعليم كـget(0). إن لم يطبع شيء، تأكد أن main ما زال يستدعي println.
لا تلصق حلقات وسيط Flag داخل Bin. لا تلصق مطالبات Scanner من Box داخل Bin. مهمة Generics الاختيارية هي قوائم مُنمّطة مع نوع عنصر واضح.
قبل Lambda الاختياري
يمكنك أن تبقي الفئة العامة Bin، وتستورد ArrayList، وتبني ArrayList<String> مع diamond، وتضيف "oak"، وتطبع get(0) كـoak، ثم تبني ArrayList<Integer>، وتضيف 3، وتطبع 3. جمّع بـjavac Bin.java وشغّل java Bin. الجدول يفصل الإعلان والإنشاء والتخزين والقراءة. الصفحة الاختيارية التالية هي Lambda.
أبقِ عروض Bin لزوج Generics واضح. أبقِ ملفات وسائط Flag خارج هذه الصفحة عند تمرين القوائم المُنمّطة. أبقِ ملفات المشروع الصغير Box خارج هذه الصفحة عند تمرين القوائم المُنمّطة. أبقِ عمل Lambda خارج هذه الصفحة حتى ذلك الدرس. هذه العادات نقطة تفتيش قبل المتابعة. عندما يعرض عرض String oak أو عرض Integer 3، أنجزت Generics عملها لهذا الدرس وأنت جاهز لـLambda إن واصلت المسار الاختياري.
مرّة أخيرة على المجلد: Bin عامة واحدة، الاستيراد حاضر، type arguments في أقواس زاوية، diamond على new، قيم add مطابقة، طباعة get(0)، بلا انتظار Scanner، بلا كلمات تشغيل مطلوبة. شغّل javac Bin.java وjava Bin مرة أخرى على العرض المفتوح. إن بقيت الشاشة تعرض oak أو 3، شكل Generics متين ويمكن للدورة الانتقال إلى Lambda الاختياري في الصفحة التالية. فضّل عادة قائمة مُنمّطة واضحة في كل قراءة ليعلّم كل مرور نفس الخريطة.
🧠 اختبر معرفتك
اختبر معرفتك
تحدى نفسك مع هذا الاختبار التفاعلي واكتشف مدى فهمك للموضوع
📝 التعليمات
- اقرأ كل سؤال بعناية
- اختر أفضل إجابة لكل سؤال
- يمكنك إعادة الاختبار عدة مرات كما تريد
- سيتم عرض تقدمك في الأعلى