Mit C # habe ich die IEnumerable<T>
-Schnittstelle geliebt. Es gibt viele Fälle, in denen das alles ist, was Sie ausgeben und aufnehmen möchten. Außerdem ist es in der .Net-Bibliothek nützlich. Sie haben zum Beispiel einen Konstruktor für die Klasse List<T>
, der ein IEnumerable<T>
übernimmt.
Ich muss im Moment mit Java arbeiten, und natürlich wollte ich die äquivalente Schnittstelle Iterable<T>
verwenden. Es sieht jedoch nicht so aus, als könnte ich es überall benutzen. Alles scheint stattdessen die erweiterte Collection<T>
-Schnittstelle zu verwenden. Warum ist das?
Als Beispiel haben Sie den ArrayList<T>
-Konstruktor, der ein Collection<T>
:
Erstellt eine Liste mit den Elementen der angegebenen Sammlung in der Reihenfolge, in der sie vom Iterator der Sammlung zurückgegeben werden.
Warum nimmst du nicht einfach ein Iterable<T>
?
Iterable wurde nur in Java 5 hinzugefügt. Dies bedeutet, dass ältere Methoden (die meisten von ihnen) Sammlungen verwenden. Sogar neuere Methoden, die Iterable nehmen könnten, haben es nicht benutzt. : (
Ich denke, das Problem ist, dass die meisten Iterablen Sammlungen sind.
Als Beispiel haben Sie den ArrayList-Konstruktor, der eine Collection
übernimmt
Die vorhersehbare Größe ist gut, insb. für eine ArrayList (es verwendet toArray (), um das zugrunde liegende Objekt [])
zu erstellenErstellt eine Liste mit den Elementen der angegebenen Sammlung in der Reihenfolge, in der sie vom Iterator der Sammlung zurückgegeben werden.
Schöne Sonne war faul, die Dokumente erneut zu aktualisieren, es verwendet überhaupt keinen Iterator; Eigentlich selbst lese ich die Doku fast nie, da sie oft entweder irreführend oder einfach nur falsch sind.
Sie können auch einfach ein Iterable in eine Collection einfügen, indem Sie AbstractCollection ableiten (dem nur size () und iterator () fehlen)
Iterable wurde hauptsächlich eingeführt, um foreach
construct anzupassen.