تحلل هذه المقالة طريقة تغيير القائمة والمصفوفة في Java. شاركه للجميع للرجوع إليه. التفاصيل هي كما يلي:
كتبت اليوم الكود لمواجهة مشكلة غريبة. على النحو التالي:
ArrayList <string> list = new ArrayList <String> () ؛
أعتقد أنه لا ينبغي أن تكون هناك مشكلة في كتابة التعليمات البرمجية بهذه الطريقة ، وليس هناك تجميع مشكلة. ومع ذلك ، عند تشغيل العملية المحددة ، يكون التقرير غير طبيعي ، على النحو التالي: الاستثناء في الموضوع "الرئيسي" java.lang.classcastexception: [ljava.lang.object ؛
ولكن لا توجد مشكلة في الكتابة مثل هذا:
ArrayList <string> قائمة = arraylist جديدة <string> () ؛ list.get (i) ؛}
يمكننا شرح هذه الظاهرة: Java تسمح بتحويل للأعلى والأسفل ، ولكن ما إذا كان هذا التحول ناجحًا بناءً على نوع هذا الكائن في الجهاز الظاهري Java. يوفر جهاز Java Virtual نوع كل كائن. الصفيف هو أيضا كائن. نوع الصفيف [ljava.lang.object. من الواضح أن التحويل [ljava.lang.object إلى [ljava.lang.String مستحيل ، لأن هذا تحول هبوطي ، والآلة الافتراضية يحتفظ فقط بأن هذا هو صفيف كائن. في الصفيف ، العنصر هو العنصر في المصفوفة. العناصر الموجودة في الصفيف هي فقط مراجع العنصر ، وليس العنصر المحدد للتخزين ، وبالتالي لا يزال نوع العنصر في الصفيف مخزنة في الجهاز الظاهري Java.
وفقًا للتفسير أعلاه ، يمكننا تلخيص هذه المشكلة إلى النموذج التالي:
Object OBJs [] = كائن جديد [10] ؛
هذا هو نفس المجموعة أعلاه. إذا قمنا بتعديل هذا الرمز ، على النحو التالي:
String Strs [] = سلسلة جديدة [10] ؛
هذا يمكن تجميعه وإقراره. لذلك يمكننا أن ننسب هذه المشكلة إلى مشكلة قاعدة تحويل Java. دعنا نتحدث عن دعم مجموعة Java على النموذج.
لدى JDK5 بالفعل دعمًا لأنواع النماذج ، والتي يمكن أن تضمن أمان أنواع البيانات في المجموعة والخريطة. أنا شخصياً يجب أن أعيد t [] وفقًا للنموذج. ألقِ نظرة فاحصة على الكود المصدري لـ JDK وابحث عن أن القائمة لها طريقتان للتحول إلى صفيف:
الكائن العام [] tararray () ؛
تقوم هذه الطريقة بإرجاع جميع العناصر في قائمة إلى صفيف من نفس الحجم ، وجميع العناصر في الصفيف هي نوع الكائن.
الجمهور <T> t [] tararray (t [] a) ؛
تقوم هذه الطريقة بإرجاع جميع العناصر في قائمة إلى صفيف من نفس الحجم ، وجميع العناصر في الصفيف هي نوع t.
تم تصميم القائمة لأن برنامج التحويل البرمجي Java لا يسمح لنا بالحصول على صفائف طراز جديدة. وهذا يعني ، لا يمكنك تحديد صفيف مثل هذا:
t arr = new t [size] ؛
ولكن يمكنك استخدام T [] لتمثيل الصفيف ، ويمكنك تحويل الصفيف إلى T []. على سبيل المثال ، يتحقق الجمهور <T> t [] tararray (t [] a) في القائمة:
public <t> t [] tararray (t [] a) {if (A.Length <size) a = (t [] getComponentType () ، size) ؛
يمكن أن نرى من الكود أعلاه أنه نظرًا لأنك لا تعرف نوع هذه الصفيف ، يجب عليك إنشاء هذا الصفيف من خلال طريقة الانعكاس (A.GetClass (). getComponentType () للحصول على نوع من عنصر الصفيف).
في النهاية ، تتحول القائمة إلى صفيف للتعامل معها ::
ArrayList <string> list = new ArrayList <string> () ؛
على العكس ، ماذا لو كنت تريد تحويل المصفوفة إلى قائمة؟ على النحو التالي:
String [] s = {"a" ، "b" ، "c"} ؛
من المأمول أن يكون هذا المقال مفيدًا لتصميم برنامج Java للجميع.