2016-03-28 9 views
-1

Gibt es einen guten Grund Arrays in Java nicht Sammlung erweitern?Warum werden Arrays nicht als Subtyp von Collection betrachtet?

Es scheint, als wäre es nützlich, someObject instanceof Collection testen zu können, bevor man es mit for (Object element : someObject) durchläuft. Stattdessen von dem, was ich verstehe, zu wissen, der einzige Weg, wenn ein Objekt ein Array ist entweder instanceof auf jedem Array-Typ zu verwenden (Object[], int[], double[], ...) oder someObject.getClass().isArray() zu verwenden, aber dann ist dieser Kurs zwingt auch eine Nullprüfung

+1

Kurze Antwort: Arrays Pre-Datum Sammlungen, durch eine lange Maßnahme. – vikingsteve

+2

Fragen der Form _ "Warum haben die Sprachdesigner Entscheidungen getroffen?" _ Sind wirklich meinungsbasiert. Die einzigen konkreten Antworten finden sich in der Sprachspezifikation (wenn die Autoren ihre Wahl dargelegt haben) oder direkt bei den Designern. In diesem Fall war es wahrscheinlich ein Wunsch, bestehende Konzepte auf eine nicht überraschende Weise zu berücksichtigen. –

+0

Was ist falsch bei einem Null-Check? Oder, noch besser, was ist falsch daran, 'someObject.getClass(). IsArray()' die 'NullPointerException' zu werfen? –

Antwort

0

Arrays sind viel niedriger als Sammlungen; einige Sammlungen sind über Arrays (wie ArrayList oder Vector) abstrakt, aber native Arrays sind nur ein (geschützter, wohldefinierter) Speicherblock, über den Sie Ihre eigene Abstraktion erstellen können.

Warum ist das ein Problem für Sie?

Die foreach Schleife kann auch auf Arrays BTW arbeiten, in diesem Fall ist es nur in eine indexierte for Ausdruck erweitert.

0

Arrays in Java werden über spezielle Anweisungen in der JVM implementiert. Sie sind separate erstklassige Mitglieder des Systems und keine Klassen im herkömmlichen Sinne. Sie müssen vorhanden sein, um die spezialisierte Syntax zu ermöglichen, die für Arrays verwendet wird.

Es gibt zwei spezielle Fälle: Nullreferenzen und Verweise auf primitive Arrays.

Eine Nullreferenz bewirkt, dass instanceof den Wert false ergibt, während das isArray eine NullPointerException auslöst.

Anwenden auf ein primitives Array, die instanceof Ergebnisse false, aber die isArray() gibt True zurück.

0

Eigentlich gibt es viele Gründe dafür.

  • Eine Sammlung ist typsicher; Ein Array ist nicht. Da Arrays „fake“ Kovarianz kann Arrays zur Laufzeit

  • Eine Liste oder Set equals, hashCode und toString Methoden tun führen, was die Nutzer erwarten; Diese Methoden in einem Array tun alles andere als das, was Sie erwarten - eine häufige Fehlerquelle.

  • Eine Sammlung kann threadsicher sein; sogar gleichzeitig. Ein Array kann niemals in mehreren Threads veröffentlicht werden.

  • Eine Sammlung kann veränderbar oder unveränderlich sein. Ein nicht leeres Array muss immer änderbar sein.

Für weitere Details folgen Sie bitte lesen: https://stackoverflow.com/a/6105705/1691223

Verwandte Themen