أسهل طريقة لفهم جافا جيرلسيك هي اعتبارها بناء جملة مريحة يمكن أن توفر لك بعض العمليات على صب نوع جافا:
قائمة <SAPLE> BOX = ... ؛ Apple Apple = box.get (0) ؛
تم التعبير عن الكود أعلاه نفسه بوضوح: المربع عبارة عن قائمة بها كائنات Apple. تقوم طريقة GET بإرجاع مثيل كائن Apple ، ولا تتطلب هذه العملية تحويل النوع. لا يوجد أي عام ، يجب كتابة الرمز أعلاه على هذا النحو:
مربع القائمة = ... ؛ Apple Apple = (Apple) box.get (0) ؛
من الواضح أن الفائدة الرئيسية للأعداء هي السماح للمترجم بالاحتفاظ بمعلومات النوع من المعلمات ، وإجراء عمليات فحص النوع ، وأداء عمليات تحويل النوع: يضمن المترجم أن تحويلات النوع هذه صحيحة تمامًا. مقارنةً بالاعتماد على المبرمجين لتذكر أنواع الكائنات وإجراء تحويلات النوع - سيؤدي ذلك إلى فشل عند تشغيل البرنامج ، وهو أمر يصعب تصحيحه وحله. يمكن للمترجم مساعدة المبرمجين على إجبار عدد كبير من عمليات فحص النوع في وقت الترجمة وإيجاد أخطاء.
تكوين الأدوية الجيلية
تركيبة الأدوية الأدوية تؤدي إلى مفهوم متغيرات النوع. وفقًا لمواصفات لغة Java ، فإن متغيرات النوع هي نوع من الحروف الرسومية غير المقيدة ، والتي تنشأ من المواقف التالية:
الإعلان العام الإعلان العام إعلان الواجهة العامة إعلان إعلان منشئ عام
فصول وواجهات عامة
إذا كان هناك واحد أو أكثر من المتغيرات من النوع على فئة أو واجهة ، فهو عام. يتم تعريف متغيرات النوع بواسطة أقواس الزاوية ووضعها بعد فئة أو اسم الواجهة:
قائمة الواجهة العامة <T> تمتد المجموعة <T> {...}ببساطة ، فإن دور متغيرات النوع يشبه المعلمة ، والتي توفر المعلومات للمترجم لفحص النوع.
تم تعديل العديد من الفصول في مكتبة فئة Java ، مثل إطار المجموعة بأكملها ، في شكل عام. على سبيل المثال ، واجهة القائمة التي استخدمناها في الكود الأول أعلاه هي فئة عامة. في هذا الرمز ، يكون المربع عبارة عن قائمة <Apple> ، وهو مثيل لتنفيذ فئة لواجهة قائمة مع متغير نوع Apple. يستخدم برنامج التحويل البرمجي معلمة متغير النوع هذا لتحويل طريقة GET تلقائيًا عند استدعاءها وإرجاع كائن Apple.
في الواقع ، هذه العلامة العامة الناشئة حديثًا ، أو طريقة الحصول على واجهة القائمة هذه ، هي كما يلي:
T الحصول على (int index) ؛
تُرجع طريقة GET فعليًا كائنًا من النوع T ، وهو نوع متغير في القائمة <T> إعلان.
الطرق العامة والمصممون
مشابه جدًا ، إذا تم الإعلان عن متغير واحد أو أكثر على الطريقة والمنشئ ، فقد يكون أيضًا عامًا.
ثابت عام <T> t getFirst (قائمة <T> قائمة)
ستقبل هذه الطريقة قائمة <T> معلمة وإرجاع كائن من Type T. يمكنك استخدام الفئات العامة المتوفرة في مكتبة فئة Java ، أو يمكنك استخدام الفصول العامة الخاصة بك. بيانات الكتابة الآمنة ... الرمز التالي مثال. نقوم بإنشاء قائمة <String> ثم تحميل بعض البيانات:
قائمة <Tring> str = new ArrayList <String> () ؛ str.add ("Hello") ؛ Str.add ("World.") ؛إذا حاولنا تحميل كائن آخر في القائمة <String> ، فإن المترجم سيطالب بخطأ:
str.add (1) ؛
بيانات القراءة الآمنة من النوع ...
عندما نستخدم كائن قائمة <string> ، فإنه يضمن دائمًا الحصول على كائن سلسلة:
سلسلة mystring = str.get (0) ؛
اجتياز: العديد من الفصول في مكتبة الفصل ، مثل Iterator <T> ، لها وظائف محسّنة ويتم تعزيزها. تُرجع طريقة ITERATAR () في القائمة <T> الآن ITERATAR <T>. لا يحتاج الكائن الذي يتم إرجاعه بواسطة طريقة T next () إلى تحويل الكتابة ، بل تحصل مباشرة على النوع الصحيح.
لـ (iterator <string> iter = str.iterator () ؛ iter.hasnext () ؛) {string s = iter.next () ؛ system.out.print (s) ؛}مع Foreach ، يستفيد بناء جملة "لكل" من الأدوية الجيلية. يمكن كتابة الرمز السابق مثل هذا:
لـ (String S: str) {system.out.print (s) ؛}هذا سهل القراءة والصيانة.
التغليف التلقائي (autoboxing) والتفريغ التلقائي (Autounboxing). عند استخدام Java Generics ، سيتم استخدام الميزتين لـ Autoboxing/Autounboxing تلقائيًا ، تمامًا مثل الرمز التالي:
قائمة <integer> ints = new ArrayList <integer> () ؛ ints.add (0) ؛ ints.add (1) ؛ int sum = 0 ؛ for (int i: ints) {sum += i ؛ }ومع ذلك ، هناك شيء واحد تحتاج إلى فهمه هو أن التغليف والتفريغ ستجلب خسائر الأداء ، وكلها ، يجب استخدام الغرض العام بحذر.
الأدوية الجيرية هي ميزة جديدة لجافا SE 1.5. جوهر الأدوية هو نوع محدد ، أي نوع البيانات الذي يتم تشغيله كمعلمة. يمكن استخدام نوع المعلمة هذا في إنشاء الفئات والواجهات والأساليب ، ويسمى الفئات العامة والواجهات العامة والطرق العامة على التوالي.
ميزة إدخال الأدوية الجيلية بلغة Java هي أنها آمنة وبسيطة.
قبل Java SE 1.5 ، بدون جماهير ، تم تحقيق "تعسفي" المعلمات من خلال الرجوع إلى كائن النوع. كان عيب "التعسفي" هو أن تحويل نوع المصبوب الصريح كان مطلوبًا ، وهذا التحويل يتطلب من المطورين التنبؤ بنوع المعلمة الفعلي. في حالة أخطاء تحويل نوع الممثلين ، قد لا يطالب برنامج التحويل البرمجي بخطأ ، وسيحدث استثناء فقط عند التشغيل ، وهو خطر أمان.
تتمثل ميزة الأدوية في أنها تحقق من السلامة عند التجميع ، وجميع القوالب تلقائية وضمنية ، مما يحسن معدل إعادة استخدام الرمز.
هناك بعض القواعد والقيود في استخدام الأدوية الجيلية:
1. لا يمكن أن تكون معلمات النوع لأنواع عامة فقط أنواع فصول (بما في ذلك الفئات المخصصة) ، وليس أنواعًا بسيطة.
2. يمكن أن يتوافق نفس النوع العام مع إصدارات متعددة (لأن نوع المعلمة غير مؤكد) ، ومثيلات الفئة العامة من الإصدارات المختلفة غير متوافقة.
3.
4. يمكن أن تستخدم أنواع المعلمات العامة بيانات تمديد ، على سبيل المثال. عادة ما تصبح "نوعًا محددًا".
5. يمكن أن يكون نوع المعلمة للنوع العام أيضًا نوعًا من البرية. على سبيل المثال classtype = class.forname (java.lang.string) ؛
يحتوي الأدوية أيضًا على واجهات وطرق ، وما إلى ذلك ، مع الكثير من المحتوى ، ويستغرق الأمر بعض الجهد لفهم وإتقانها وتطبيقها بكفاءة. فيما يلي مثالان كتبتهما عندما علمت عن الأدوية الجنيسة (المكتوبة بناءً على الانطباع الذي رأيته) ، والذي يمكن أن يدرك نفس الوظيفة. واحد يستخدم الأدوية والآخر لا. من خلال المقارنة ، يمكنك تعلم تطبيق الأدوية الجيلية بسرعة. تعلم هذا وتعلم بشكل أساسي 70 ٪ من محتوى الأدوية.
مثال 1: يتم استخدام الأدوية الجيلية
الطبقة العامة جنت {private t ob ؛ // تحديد Generic Member Varial Gen (t ob) {this.ob = ob ؛ } t getob () {return ob ؛ } public void setob (t ob) {this.ob = ob ؛ } public void showtyep () {system.out.println ("النوع الفعلي من t هو:" + ob.getClass (). getName ()) ؛ }} الفئة العامة gendemo {public static void main (string [] args) {// تحديد نسخة عدد صحيح من الفئة العامة gen gen intob = new geninteger (88) ؛ intob.showtyep () ؛ int i = intob.getob () ؛ System.out.println ("value =" + i) ؛ System.out.println ("---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------مثال 2: لا يتم استخدام الأدوية الجيرية
الفئة العامة Gen2 {private object ob ؛ // تحديد نوع عام من Gen2 Gen2 (Object ob) {this.ob = ob ؛ } الكائن العام getOb () {return ob ؛ } public void setob (object ob) {this.ob = ob ؛ } public void showtyep () {system.out.println ("النوع الفعلي من t هو:" + ob.getClass (). getName ()) ؛ }} الفئة العامة gendemo2 {public static void main (string [] args) {// تحديد نسخة عدد صحيح من الفئة Gen2 gen2 intob = new gen2 (عدد صحيح جديد (88)) i);System.out.println("------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ strob.getob () ؛ system.out.println ("value =" + s) ؛نتائج التشغيل:
نتائج تشغيل العرض التوضيحي في المثالين هي نفسها ، وإخراج وحدة التحكم كما يلي:
النوع الفعلي من T هو:
java.lang.integer
القيمة = 88
---------------------------------
النوع الفعلي من t هو: java.lang.string
القيمة = مرحبا الجنرال!
انتهت العملية برمز الخروج 0
إذا فهمت هذا ، فلن تكون مشكلة في المستقبل عندما تكون التطبيقات العامة الأساسية وقراءة التعليمات البرمجية.
ما سبق هو مثال تحليل جافا الأدوية. يمكن للأصدقاء الذين يتعلمون جافا جيرلسي أن يشير إليها.