Dieser Artikel analysiert die Methode zum Ändern von Liste und Array in Java. Teilen Sie es für alle für Ihre Referenz. Die Einzelheiten sind wie folgt:
Heute habe ich den Code geschrieben, um auf ein seltsames Problem zu stoßen. wie folgt:
ArrayList <string> list = new ArrayList <string> ();
Ich denke, es sollte kein Problem beim Schreiben von Code auf diese Weise geben, und es gibt keine Problemzusammenstellung. Wenn der spezifische Vorgang jedoch ausgeführt wird, ist der Bericht wie folgt abnormal: Ausnahme in Thread "Haupt" java.lang.classcastexception: [ljava.lang.Object;
Aber es gibt kein Problem mit solchen Schreiben:
ArrayList <string> list = new ArrayList <string> (); list.get (i);}
Wir können dieses Phänomen erklären: Java erlaubt eine Aufwärts- und Abwärtstransformation, aber ob diese Transformation auf der Grundlage des Typs dieses Objekts in der virtuellen Java -Maschine erfolgreich ist. Die virtuelle Java -Maschine speichert den Typ jedes Objekts. Das Array ist auch ein Objekt. Die Art des Arrays [ljava.lang.Object. Konvertieren [ljava.lang.Object in [ljava.lang.String ist offensichtlich unmöglich, da dies eine Abwärtstransformation ist, und die virtuelle Maschine bewahrt nur, dass dies ein Objektarray ist. In dem Array ist das Element das Element im Array. Die Elemente im Array sind nur die Referenzen des Elements, nicht das spezifische Speicherelement, sodass die Art des Elements im Array immer noch in der virtuellen Java -Maschine gespeichert ist.
Nach der obigen Erklärung können wir dieses Problem mit dem folgenden Modell zusammenfassen:
Objekt objs [] = neues Objekt [10];
Dies ist das gleiche wie die obige Zusammenstellung. Wenn wir diesen Code wie folgt ändern:
String strs [] = neuer String [10];
Dies kann zusammengestellt und bestanden werden. So können wir dieses Problem einem Problem einer Java -Transformationsregel zuschreiben. Lassen Sie uns über die Unterstützung des Java -Arrays des Modells sprechen.
JDK5 unterstützt bereits Modelltypen, die die Sicherheit von Datentypen in der Sammlung und der Karte sicherstellen können. Persönlich sollte ich das entsprechende T [] gemäß dem Modell zurückgeben. Schauen Sie sich den Quellcode von JDK genauer an und finden Sie, dass diese Liste zwei Möglichkeiten bietet, sich in Array zu verwandeln:
öffentliches Objekt [] toArray ();
Diese Methode gibt alle Elemente in der Liste auf ein Array derselben Größe zurück, und alle Elemente im Array sind Objekttyp.
public <t> t [] toArray (t [] a);
Diese Methode gibt alle Elemente in der Liste auf ein Array derselben Größe zurück, und alle Elemente im Array sind t Type.
Die Liste wurde entwickelt, weil der Java -Compiler es uns nicht erlaubt, neue Modellarrays zu haben. Das heißt, Sie können ein Array wie dieses nicht definieren:
T arr = neu t [Größe];
Sie können jedoch T [] verwenden, um das Array darzustellen, und Sie können das Array in T [] konvertieren. Zum Beispiel wird die öffentliche <t> t [] toArray (t [] a) in der Liste realisiert:
public <t> t [] toArray (t [] a) {if (a.Length <size) a = (t []) java.lang.reflect.array.Newinstance (A.getClass (). getComponentType (),, GetComponentType (), Größe);
Aus dem obigen Code ist ersichtlich, dass Sie dieses Array durch den Reflexionsmechanismus (A.getClass ().
Am Ende konvertiert die Liste in Array, um es zu handhaben ::
ArrayList <string> list = new ArrayList <string> ();
Was ist umgekehrt, wenn Sie das Array in die Liste umwandeln möchten? wie folgt:
String [] s = {"a", "b", "c"};
Es ist zu hoffen, dass dieser Artikel für Java -Programmdesign aller hilfreich ist.