سؤال

وأنا مبتدئ وأنا لا أستطيع فهم تأثير حقيقي واجهة Iterable.

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

المحلول

وإلى جانب ما قال جيريمي، والمنفعة الرئيسية هي أن لديها قليلا الخاصة به نحوي السكر: في المعززة لحلقة . إذا كان لديك، يقول، Iterable<String>، يمكنك القيام به:

for (String str : myIterable) {
    ...
}

ونيس وسهلة، أليس كذلك؟ يتم التعامل مع كل بالعمل القذر نيابة عن خلق Iterator<String>، والتحقق ما اذا كان hasNext()، والدعوة str = getNext() وراء الكواليس من قبل المجمع.

ولأن معظم مجموعات إما تنفيذ Iterable أو كان لديه رأي وترجع واحد (مثل Map keySet() أو values())، وهذا يجعل العمل مع مجموعات أسهل بكثير.

Iterable جافادوك يعطي كامل قائمة الفئات التي تقوم بتنفيذ Iterable.

نصائح أخرى

إذا كان لديك مجموعة بيانات معقدة، مثل شجرة أو طابور حلزونية (نعم، أنا فقط أن يصل)، ولكنك <م> لا يهمني كيف انها تنظيما داخليا، كنت ترغب فقط في الحصول على جميع العناصر واحدا تلو الآخر، وتحصل على العودة مكرر.

والكائن المعقد في المسألة، سواء كان شجرة أو طابور أو WombleBasket تنفذ Iterable، ويمكن إرجاع كائن مكرر أنه يمكنك الاستعلام باستخدام الأساليب مكرر.

وبهذه الطريقة، يمكنك فقط أسأل أنه إذا كان hasNext()، وإذا كان كذلك، يمكنك الحصول على البند next()، دون الحاجة إلى القلق مكان الحصول عليه من شجرة أو في أي مكان.

وتقوم بإرجاع java.util.Iterator. وهي تستخدم أساسا لتكون قادرة على استخدام نوع المنفذة في المعززة لحلقة

List<Item> list = ...
for (Item i:list) {
 // use i
}

وتحت غطاء محرك السيارة المترجم يدعو list.iterator() وبالتكرار ذلك مما يتيح لك i داخل لحلقة.

واجهة هي في جوهرها قائمة الأساليب التي فئة ينبغي أن تنفذ. واجهة iterable بسيطة جدا - هناك طريقة واحدة فقط لتنفيذ: Iterator(). عندما تنفذ فئة واجهة Iterable، فإنه يقول الفئات الأخرى التي يمكنك الحصول عليها كائن Iterator لاستخدامها لتكرار عبر (أي اجتياز) البيانات في الكائن.

والمكررات تسمح أساسا للتكرار على أي مجموعة.

وكما انها ما هو مطلوب لاستخدام جافا مقابل كل بيان السيطرة.

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