2016-08-29 2 views
-1

Ich weiß, eine erweiterte for-Schleife (seit Java 1.5) kann verwendet werden, um über Sammlungen von Klassen-Typen zu iterieren, die die Iterator-Schnittstelle implementieren. Es kann jedoch auch verwendet werden, um über Arrays primitiver Typen zu iterieren, z. int, boolean, ... Meine logische Schlussfolgerung war also, dass zum Beispiel Primobild-Ganzzahlen dank Autoboxing und Unboxing in ihren Referenztyp eingeschlossen wurden, der dann wiederum Iteratable implementieren würde.Wie iteriert eine erweiterte For-Schleife genau gegenüber primitiven Typen?

Wenn ich jedoch die Dokumentation von java.lang.Integer nachgeschlagen habe, wird nirgendwo eine Erweiterung oder Implementierung einer Oberklasse oder Schnittstelle erwähnt, die die Iterable Schnittstelle implementieren oder erweitern könnte. Wie kann eine erweiterte for-Schleife Schleife über primitive Typen ohne die Iterable Schnittstelle implementiert werden?

+1

Mindestens verwandten: http://stackoverflow.com/questions/3912765/how-does-the -Verbesserung-für-Arrays-und-wie-bekomme-ein-Iterator-f, http://stackoverflow.com/questions/85190/how-does-the-java-for-each -Loop-Arbeit? rq = 1 –

Antwort

5

Sie suchen an der falschen Stelle. Es ist nicht die Einträge, die iterable sein müsste, ist es die Array, die sein müsste. Aber die wirkliche Antwort ist, dass die erweiterte for-Schleife native Unterstützung für das Durchschleifen von Arrays bietet. Z. B. ist es zum Durchschleifen der Arrays und, separat, iterierbar. Seel JLS§14.14.2 - The enhanced for statement, die zwei mögliche Verwendungen gibt:

  • Wenn die Art der Expression ein Subtyp von Iterable ist, dann ist die Übersetzung wie folgt.

    (... spezifiziert Algorithmus zum Durchschleifen Iterable ...)

  • Andernfalls wird die Expression notwendigerweise ein Array-Typ, T[].

    (... spezifiziert Algorithmus zum Durchschleifen T[] Array ...)

Verwandte Themen