Klonen Sie die Java-Liste.

· ArrayList ist klonbar (dasselbe gilt für Set und Map), List ist jedoch nicht klonbar.

-Ich möchte klonen, was als Liste anstelle einer ArrayList übergeben wurde, aber es gibt Situationen, in denen ich es nicht gehorsam tun kann. Was soll ich machen?

・ Hier bin ich frustriert, wenn ich Java verwende. Es ist das gleiche Bedauern, dass int ⇔ Integer zugewiesen werden kann, int [] ⇔ Integer [] jedoch nicht zugewiesen werden kann.

・ Noch ein Schlangenbein. Das Beispiel verwendet getDeclaredMethod. -GetDeclaredMethod (getDeclaredMethods) ruft die in der Klasse deklarierten Methoden ab. -GetMethod (getMethods) enthält die in der Basisklasse deklarierten Methoden.

★ Ergänzung ★ Wie von felis unten ausgeführt, können Sie CopyOf of List von Java 10 aus verwenden. Das folgende Testprogramm läuft auf JDK 1.6.

package jp.avaj.lib.algo;

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.List;

import jp.avaj.lib.test.ArTest;
import jp.avaj.lib.test.L;

/**
Klonliste

ArrayList ist klonbar, List jedoch nicht klonbar.Gleiches gilt für Set und Map.
 */
public class Tips0056 {
  public static void main(String[] args) throws NoSuchMethodException, SecurityException, IllegalAccessException, IllegalArgumentException, InvocationTargetException {

    List<String> list = ArList.construct("a,b,c");
    List<String> newList;

    //Dies ist ein Kompilierungsfehler
    //newList = (List<String>)list.clone();
    L.p("Du kannst das"); //Es ist jedoch nicht bekannt, ob es sich um eine ArrayList handelt, wenn sie als Liste übergeben wird..
    newList = (List<String>)((ArrayList)list).clone();
    L.p(newList.toString());

    L.p("Holen Sie sich die Klonmethode aus der tatsächlichen Klasse und rufen Sie sie auf");
    //Holen Sie sich die Klonmethode in der aktuellen Klasse.Wenn es einen Parameter gibt, geben Sie ihn am Ende an, aber er ist jetzt nicht mehr erforderlich
    Method cloneMethod = list.getClass().getDeclaredMethod("clone");
    //Wenn es keine Methode gibt, tritt eine Ausnahme auf. Wenn Sie also hierher kommen, gibt es eine Methode.

    //Führen Sie die Methode aus.Wenn es einen Parameter gibt, geben Sie ihn am Ende an, aber er ist jetzt nicht mehr erforderlich.
    newList = (List<String>)cloneMethod.invoke(list);

    //Überprüfen Sie das Ergebnis.
    ArTest.equals("clone","expected",3,"size",newList.size());
    ArTest.equals("clone","expected","a","(0)",newList.get(0));
    ArTest.equals("clone","expected","b","(1)",newList.get(1));
    ArTest.equals("clone","expected","c","(2)",newList.get(2));
    //Visuell prüfen
    L.p(newList.toString());
  }
}

Das Ergebnis ist wie folgt

Du kannst das
[a, b, c]
Holen Sie sich die Klonmethode aus der tatsächlichen Klasse und rufen Sie sie auf
OK clone:expected=3:size=3
OK clone:expected=a:(0)=a
OK clone:expected=b:(1)=b
OK clone:expected=c:(2)=c
[a, b, c]

Recommended Posts

Klonen Sie die Java-Liste.
Java Memorandum (Liste)
Informationen zur Java-Array-Liste
[Memo] Java Linked List
Java / Twitter-Klon- / Aufgabenverwaltungssystem ④ Aufgabenliste anzeigen
[Java] Konvertierung von Listentyp / Array-Typ
Java
[Java] Liste der betriebssystemabhängigen Standardbibliotheken
Listenaggregation in Java (Collectors.groupingBy)
Java
Java-Liste als Gruppe, Sortierung usw.
Listendatenstruktur [Java / Scala]
[Java] Löschen Sie die Elemente von List
Java-Methodenliste (Denkmal) (im Aufbau)
Liste der Java-Objekte sortieren
[Java] Konvertiere 1 in N Liste in Karte
Liste der in Java 9 hinzugefügten Mitglieder
[Java] Verwendung von List [ArrayList]
Überraschend tiefe Java-Liste Inversion-Stream-Verarbeitung
Liste der in Java 9 hinzugefügten Typen
[Java] Konvertierung von Array zu Liste
Java-Array / Liste / Stream gegenseitige Konvertierungsliste
Java8-Listenkonvertierung mit Stream Map
Java lernen (0)
Implementierung der Klonmethode für Java Record
Java studieren ―― 3
Java geschützt
[Java] Anmerkung
[Java] Modul
Java-Array
Java studieren ―― 9
Java Scratch Scratch
Java-Tipps, Tipps
[Java] Listen- / Kartenelemente mit Iterator abrufen
Java-Methoden
Java-Methode
Java (Konstruktor)
Java-Array
[Java] ArrayDeque
Java (überschreiben)
Java Day 2018
Java-Zeichenfolge
Java (Array)
Java statisch
Java-Serialisierung
Java Anfänger 4
JAVA hat bezahlt
Java studieren ―― 4
Java (gesetzt)
Java-Shell-Sortierung
[Java] compareTo
Java studieren -5
Java (Schnittstelle)
[Java] Hinzufügen von Daten zur Liste (add, addAll)
Java-Memorandum
Java-Array
Java studieren ―― 1
[Java] Array