Implementierung der Klonmethode für Java Record

Implementieren Sie die Klonmethode in Record, der zweiten Vorschau in Java 15, und aktivieren Sie Deep Copy. Ich glaube nicht, dass es eine bestimmte Szene gibt, um dies zu verwenden, aber ich kann sie eines Tages verwenden, also werde ich sie als Memorandum verwenden. Der Punkt ist, einen Klon mit dem Konstruktor zu erstellen, ohne super.clone () zu verwenden.

Umgebung

Java 15(Oracle Open JDK) IntelliJ IDEA Community-Version Windows

Implementierung

Vor dem Implementieren des Klons

ExampleRecord.java

public record ExampleRecord(String name, int age, ExampleDto dto) {
}

ExampleDto.java

public class ExampleDto {
  private String name;
  private int age;
  private NodeDto node;
  // setter, getter,toString weggelassen
}

NodeDto.java

public class NodeDto {
  private String name;
  // setter, getter,toString weggelassen
}

Nach der Implementierung des Klons

ExampleRecord.java

public record ExampleRecord(String name, int age, ExampleDto dto) {
  @Override
  public ExampleRecord clone() {
    try {
      return new ExampleRecord(this.name, this.age, this.dto.clone());
    } catch (CloneNotSupportedException e) {
      e.printStackTrace();
    }
    return null;
  }
}

ExampleDto.java

public class ExampleDto implements Cloneable {
  private String name;
  private int age;
  private NodeDto node;
  // setter, getter,toString weggelassen

  @Override
  public ExampleDto clone() throws CloneNotSupportedException {
    ExampleDto copy = (ExampleDto) super.clone();
    copy.node = this.node.clone();
    return copy;
  }
}

NodeDto.java

public class NodeDto implements Cloneable {
  private String name;
  // setter, getter,toString weggelassen

  @Override
  public NodeDto clone() throws CloneNotSupportedException {
    return (NodeDto) super.clone();
  }
}

Versuchen

Implementierung

Main.java


public class Main {
  public static void main(String[] args) {
    ExampleDto dto = new ExampleDto();
    NodeDto nodeDto = new NodeDto();
    nodeDto.setName("node1");
    dto.setNode(nodeDto);
    dto.setName("dto1");
    dto.setAge(1);
    ExampleRecord exampleRecord = new ExampleRecord("record1", 2, dto);
    System.out.println("exampleRecord:"+exampleRecord);// 1
    dto.setName("dto2");
    nodeDto.setName("node2");
    System.out.println("exampleRecord:"+exampleRecord);// 2

    ExampleRecord clone = exampleRecord.clone();
    System.out.println("clone:"+clone);// 3
    dto.setName("dto3");
    nodeDto.setName("node3");
    System.out.println("clone:"+clone);// 4
  }
}

Ausführungsergebnis

1.

exampleRecord:ExampleRecord[name=record1, age=2, dto=ExampleDto{name='dto1', age=1, node=NodeDto{name='node1'}}]

2.

exampleRecord:ExampleRecord[name=record1, age=2, dto=ExampleDto{name='dto2', age=1, node=NodeDto{name='node2'}}]

3.

clone:ExampleRecord[name=record1, age=2, dto=ExampleDto{name='dto2', age=1, node=NodeDto{name='node2'}}]

4.

clone:ExampleRecord[name=record1, age=2, dto=ExampleDto{name='dto2', age=1, node=NodeDto{name='node2'}}]

In 1-> 2 hat sich der Inhalt von Dto geändert, in 3-> 4 jedoch, da es sich um eine andere Instanz handelt, dto.setName (" dto3 "); undnodeDto.setName ("node3"); Sie können sehen, dass es ohne Probleme nicht betroffen und geklont ist.

Recommended Posts

Implementierung der Klonmethode für Java Record
[Java] Implementierung des Faistel-Netzwerks
[Java] Implementierungsmethode für die Timer-Verarbeitung
Vorteile der statischen Java-Methode
Java-Implementierung von Tri-Tree
Zusammenfassung der Methoden zum Lesen von Dateien für jedes Java-Dateiformat
Ich habe [Klonmethode für Java-Arrays] als Klonmethode in Java-Arrays übersetzt.
[Für Anfänger] Zusammenfassung des Java-Konstruktors
Kotlin-Generika für Java-Entwickler
Implementierung einer ähnlichen Funktion in Java
Java-Methode
Java (Methode)
[Details] Implementierung von Consumer-Anwendungen mit der Kinesis Client Library für Java
Java-Methode
[Java] -Methode
[Java] -Methode
Implementierung von DBlayer in Java (RDB, MySQL)
Rails [Für Anfänger] Implementierung der Kommentarfunktion
Liste der Download-Ziele für Oracle Java
Funktionen des Spring Frameworks für Java-Entwickler
Vergleich der Thread-Implementierungsmethoden in Java und der Lambda-Ausdrucksmethode
[Java] Behandlung von Java Beans in der Methodenkette
Zusammenfassung der Java-Umgebungseinstellungen für mich [mac]
Benötigen Sie eine speicherbewusste Implementierung von Java?
[Java] Dynamischer Methodenaufruf durch Reflektion des Aufzählungstyps (Aufzählung)
Für JAVA-Lernen (2018-03-16-01)
Die Reihenfolge der Java-Methodenmodifikatoren ist festgelegt
Klonen Sie die Java-Liste.
Java8-Methodenreferenz
[Java] forEach-Methode
[JQuery] Implementierungsverfahren der AutoComplete-Funktion [Java / Spring]
Methodenname der statischen Factory-Methode, die aus Java 8 gelernt wurde
2017 IDE für Java
Hinweise zur Einführung für erfahrene JavaScript-Lernende von Java
Eine Sammlung einfacher Fragen für Java-Anfänger
[Java] Ist es nicht erforderlich, "Identität" bei der Implementierung der equals () -Methode zu überprüfen?
Methodenname der Methodenkette in Java Builder + α
Java8-Methodenreferenz
[Java] Zufällige Methode
[Einführung in Java] Grundlagen der Java-Arithmetik (für Anfänger)
[Java] Übersicht über Java
[Java] Split-Methode
Java für Anweisung
Überprüfung und Implementierung der CSV-Bibliothek zum Laden großer Datenmengen in MySQL (Java)
[Java] Implementierungsmethoden-Memo zum Festlegen des WS-Security-Benutzernamens-Tokens im SOAP-Stub von axis2
[Read Effective Java] Kapitel 3 Punkt 12 "Berücksichtigung der Implementierung von Comparable"
Rufen Sie eine Liste mit MBean-Informationen für Java-Anwendungen ab
Implementierung der asynchronen Verarbeitung für einen einzelnen Mandanten in Tomcat
[Für Anfänger] Verstehen Sie schnell die Grundlagen von Java 8 Lambda
Initialisierung von for Versuchen Sie, das Java-Problem in TypeScript 5-4 zu ändern
Implementierungsbeispiel eines einfachen LISP-Verarbeitungssystems (Java-Version)
Einführung in Java für Anfänger Grundkenntnisse der Java-Sprache ①
Java Häufig verwendete Anweisungsliste (für Anfänger und Anfänger)
Links für jede Version (japanische Version) der Java SE-API
Ausführen des WebCamCapture-Beispiels von NyARToolkit für Java