كيفية إنشاء مثيل لمصفوفة Java مع إعطاء نوع مصفوفة في وقت التشغيل؟

StackOverflow https://stackoverflow.com/questions/77387

  •  09-06-2019
  •  | 
  •  

سؤال

في إطار عمل مجموعات Java، تعلن واجهة المجموعة عن الطريقة التالية:

<T> T[] toArray(T[] a)

إرجاع مصفوفة تحتوي على كافة العناصر الموجودة في هذه المجموعة؛نوع وقت تشغيل المصفوفة التي تم إرجاعها هو نوع المصفوفة المحددة.إذا كانت المجموعة تناسب المصفوفة المحددة، فسيتم إرجاعها فيها.بخلاف ذلك، يتم تخصيص مصفوفة جديدة بنوع وقت تشغيل المصفوفة المحددة وحجم هذه المجموعة.

إذا أردت تنفيذ هذه الطريقة، كيف يمكنك إنشاء مصفوفة من هذا النوع أ, ، معروف فقط في وقت التشغيل؟

هل كانت مفيدة؟

المحلول

استخدم الطريقة الثابتة

java.lang.reflect.Array.newInstance(Class<?> componentType, int length)

يمكن العثور على برنامج تعليمي حول استخدامه هنا:http://java.sun.com/docs/books/tutorial/reflect/special/arrayInstance.html

نصائح أخرى

من خلال النظر في كيفية قيام ArrayList بذلك:

public <T> T[] toArray(T[] a) {
    if (a.length < size)
        a = (T[])java.lang.reflect.Array.newInstance(a.getClass().getComponentType(), size);
    System.arraycopy(elementData, 0, a, 0, size);
    if (a.length > size)
        a[size] = null;
    return a;
}
Array.newInstance(Class componentType, int length)

لإنشاء مصفوفة جديدة من النوع العام (المعروف فقط في وقت التشغيل)، يجب عليك إنشاء مصفوفة من الكائنات وإلقائها ببساطة إلى النوع العام ثم استخدامها على هذا النحو.يعد هذا قيدًا على التنفيذ العام لـ Java (المحو).

T[] newArray = (T[]) new Object[X]; // where X is the number of elements you want.

تأخذ الوظيفة بعد ذلك المصفوفة المعطاة (أ) وتستخدمها (التحقق من حجمها مسبقًا) أو تقوم بإنشاء واحدة جديدة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top