عام So -so: يسمح بتحديدها في فئة التعريف والواجهة المحددة من الأنواع. الجينسنغ)
عام أو واجهة
رمز رمز نسخ النحوي "الماس" هو كما يلي:
//تعريف
قائمة الواجهة العامة <e> تمتد المجموعة <e>
HashMap من الطبقة العامة <K ، V> يمتد AbstractMap <K ، V> تنفيذ الخريطة <K ، V> ، استنساخ ، قابلة للتسلسل ، قابلة للتسلسل ، قابلة للتسلسل
//يستخدم
قائمة <Tring> list = new ArrayList () ؛
// يمكن لـ java7 حذف معلمات نوع Parentica sub
قائمة <Tring> list = new ArrayList <> () ؛
من الفئة الفرعية المشتقة العامة
نسخ رمز رمز على النحو التالي:
// الطريقة 1
تطبيق الفئة العامة يمتد generictype <string>
// الطريقة 2
تطبيق الطبقة العامة <T> يمتد Genepe <T>
// الطريقة 3
تطبيق الطبقة العامة يمتد الجيل
الزائفة
لا توجد فئة عامة حقيقية. غير مسموح به في الطرق الثابتة ، وكتل التهيئة الثابتة ، والمتغيرات الثابتة.
-الأساليب التالية هي رمز رمز النسخ الخاطئ على النحو التالي:
بيانات T الثابتة الخاصة ؛
ثابت {
ر ؛
}
فونك الفراغ الثابت العام () {
t name = 1 ؛
}
يمكن التحقق من الأمثلة التالية من الجانب للتحقق من عدم وجود رمز رمز نسخ عام على النحو التالي:
الفراغ الثابت العام الرئيسي (سلسلة [] args) {{
قائمة <Tring> a1 = new ArrayList <> () ؛
قائمة <integer> a2 = new ArrayList <> () ؛
System.out.println (a1.getClass () == a2.getClass ()) ؛
system.out.println (a1.getClass ()) ؛
System.out.println (A2.GetClass ()) ؛
}
رمز رمز نسخ الإخراج كما يلي:
حقيقي
فئة java.util.arraylist
فئة java.util.arraylist
الأنواع
بادئ ذي بدء ، يجب أن يكون من الواضح أنه إذا كانت فئة الوالدين في Bar ، ولكن قائمة <Foo> ليست فئة الوالدين من القائمة <Bar>. وهذا هو ، قائمة <؟> فئة الوالدين من القوائم العامة المختلفة. نظرًا لأنه لا يمكن للبرنامج تحديد النوع في القائمة ، لا يمكن إضافة الكائن. ولكن يجب أن يكون الكائن الذي تم الحصول عليه هو نوع الكائن.
ستؤدي الطريقة التالية إلى تجميع الخطأ:
نسخ رمز رمز على النحو التالي:
قائمة <؟> list = new ArrayList <> () ؛
list.add (new Object ()) ؛
ما هو الوقت الفكرة:
1. لا يمكن استخدام الكائنات <string> ككائنات قائمة <Object> ، أي أن الفئة <String> ليست فئة فرعية لفئة القائمة <Object>.
2. المصفوفة والأذهبية مختلفة: على افتراض أن FOO هو نوع فرعي (فئة فرعية أو فرعية) من الشريط ، ثم لا يزال FOO [] من النوع الفرعي [] ؛
3. من أجل تمثيل الفئات الأصل من الأدوية الجيرية المختلفة ، نحتاج إلى استخدام نوع التمرير. الكتابة: قائمة <؟> عنصر النوع). تسمى علامة الاستفهام هذه (؟) المباراة العامة ، ويمكن أن يتطابق نوع العنصر الخاص به بأي نوع.
الحد الأعلى للتوافق
قائمة <؟ لا يمكن أن يكون لدى النوع العام مع مواطني الأساليب ، وفقط طريقة GET.
يمكنك إعداد الحد الأعلى للمواطنين حل المشكلات التالية: الكلب هو الفئة الفرعية للحيوان.
مجردة الفئة الحيوان {
المجردة المجردة المجردة () ؛
}
فئة الكلب تمتد الحيوان {
تشغيل الفراغ العام () {
System.out.println ("Dog Run") ؛
}
}
تطبيق الفئة العامة {
GetSize الفراغ الثابت العام (قائمة <Nimal> قائمة) {
System.out.println (list.size ()) ؛
}
الفراغ الثابت العام الرئيسي (سلسلة [] args) {{
قائمة <Cog> list = new ArrayList <> () ؛
GetSize (قائمة) ؛
}
}
السبب وراء برمجة الخطأ هنا هو أن القائمة <Nimal> ليست فئة الوالدين للقائمة <Dog>. يمكن للحل 1 تغيير طريقة GetTize في الجينسنغ على شكل منتصف <nimal> لإدراج <؟ ، ولكن في هذه الحالة ، في كل مرة يكون فيها كائن GET إلزاميًا ، يكون تحويل النوع أكثر إزعاجًا. يتم حل هذه المشكلة من خلال الحد الأقصى للمواطنين.
الحد الأدنى للمواطنين
القائمة <؟ لا يمكن أن يكون لدى النوع العام مع مواطني طريقة الحصول على طريقة ، ويمكن أن تكون الأساليب المحددة فقط متاحة.
طريقة عامة
إذا كانت فئة التعريف والواجهات لا تستخدم نوعًا من الجينسنغ ، ولكن عند تحديد الأساليب ، إذا كنت ترغب في تحديد نوع الجينسنغ بنفسك ، فسيوفر ذلك أيضًا. تُدرج علامات توقيع الأسلوب العام أكثر من إعلانات التصنيف. تنسيق القواعد على النحو التالي:
نسخ رمز رمز على النحو التالي:
اسم الطريقة الحديثة لنوع قيمة إرجاع المعدل (قائمة الفئة) {
// طريقة الجسم
}
تتيح الطريقة العامة استخدام الأنواع لتمثيل علاقة الاعتماد على النوع بين معلمة أو أكثر التي تمثل الطريقة ، أو التبعيات النوع بين قيمة إرجاع الطريقة والمعلمة. إذا لم تكن هناك تبعيات من هذا النوع ، فلا ينبغي استخدام الطريقة العامة. تستخدم طريقة نسخ المجموعات طرقًا عامة:
نسخ رمز رمز على النحو التالي:
نسخة عامة ثابتة <T> باطلة
تتطلب هذه الطريقة أن يكون نوع SRC فئة فرعية أو نفسها من نوع القدر.
مسح والتحويل
في التعليمات البرمجية العامة الصارمة ، يجب أن تحمل الفئات ذات التصريحات العامة دائمًا معلمات نوع. ومع ذلك ، من أجل أن تظل متسقة مع رمز Java القديم ، يُسمح أيضًا بتحديد معلمات النوع عند استخدام فئة مع بيان وراثي. إذا لم يكن هناك معلمة نوع محددة لهذه الفئة العامة ، فإن هذا النوع من المعلمات يسمى النوع الخام (النوع الأصلي) ، والافتراضي هو أول نوع الحد الأعلى المحدد عند المعلمة.
عندما يتم تعيين كائن يحتوي على معلومات عامة إلى متغير آخر بدون معلومات عامة ، يتم إلقاء جميع المعلومات بين الأقواس. على سبيل المثال ، يتم تحويل قائمة <String> إلى قائمة ، ثم تصبح قائمة نوع عنصر المجموعة الحد الأعلى لمتغير النوع (أي الكائن) ، ويتم محو هذا الموقف.
مثال رمز كود النسخ كما يلي:
فئة Apple <T يمتد الرقم>
{{
ر الحجم
التفاح العام ()
{{
}
التفاح العام (حجم t)
{{
this.size = الحجم ؛
}
مجموعة الفراغ العام (حجم t)
{{
this.size = الحجم ؛
}
g getSize () العامة ()
{{
إعادة هذا.
}
}
الطبقة العامة eraretest
{{
الفراغ الثابت العام (سلسلة [] args)
{{
Apple <finger> A = Apple New <> (6) ؛
// طريقة GetTize Gettor إلى كائن INTEGER
عدد صحيح As = A.GetSize () ؛
// empress الكائن A إلى متغير Apple ، ويفقد معلومات النوع في القوس
Apple B = A ؛
// B يعرف فقط أن نوع الحجم هو الرقم
حجم الرقم 1 = b.getSize () ؛
// الكود التالي يسبب خطأ التجميع
حجم عدد صحيح = b.getSize () ؛
}
}