Implémentation de la méthode de clonage pour Java Record

Implémentez la méthode de clonage sur Record, qui est le deuxième aperçu de Java 15, et activez la copie complète. Je ne pense pas qu'il y ait une scène particulière pour l'utiliser, mais je peux l'utiliser un jour, alors je vais l'utiliser comme un mémorandum. Le but est de faire un clone avec le constructeur sans utiliser super.clone ().

environnement

Java 15(Oracle Open JDK) Version de la communauté IntelliJ IDEA Windows

la mise en oeuvre

Avant d'implémenter le clone

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 omis
}

NodeDto.java

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

Après avoir implémenté le clone

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 omis

  @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 omis

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

essayer

la mise en oeuvre

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
  }
}

Résultat d'exécution

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'}}]

En 1-> 2, le contenu de Dto a changé, mais en 3-> 4, c'est une instance différente, donc dto.setName (" dto3 "); ʻand nodeDto.setName (" node3 ");` Vous pouvez voir qu'il n'est pas affecté et cloné sans aucun problème.

Recommended Posts

Implémentation de la méthode de clonage pour Java Record
[Java] Implémentation du réseau Faistel
[Java] Méthode d'implémentation du traitement du minuteur
Avantages de la méthode statique Java
Implémentation Java de tri-tree
Résumé des méthodes de lecture de fichiers pour chaque format de fichier Java
J'ai traduit [Méthode Clone pour les tableaux Java] comme méthode Clone dans les tableaux Java.
[Pour les débutants] Résumé du constructeur java
Génériques Kotlin pour les développeurs Java
Implémentation d'une fonction similaire en Java
Méthode Java
java (méthode)
[Détails] Implémentation d'applications grand public avec Kinesis Client Library for Java
Méthode Java
[Java] méthode
[Java] méthode
Implémentation de DBlayer en Java (RDB, MySQL)
Rails [Pour les débutants] Implémentation de la fonction de commentaire
Liste des destinations de téléchargement pour Oracle Java
Fonctionnalités du framework Spring pour les développeurs Java
Comparaison des méthodes d'implémentation de thread en Java et de la méthode d'expression lambda
[Java] Gestion des Java Beans dans la chaîne de méthodes
Récapitulatif des paramètres de l'environnement Java pour moi-même [mac]
Avez-vous besoin d'une implémentation de Java compatible avec la mémoire?
[Java] Appel de méthode dynamique par réflexion du type enum (enum)
Pour l'apprentissage JAVA (2018-03-16-01)
L'ordre des modificateurs de méthode Java est fixe
Clonez la liste Java.
Référence de la méthode Java8
[Java] méthode forEach
[JQuery] Procédure d'implémentation de la fonction de saisie semi-automatique [Java / Spring]
Nom de la méthode de la méthode de fabrique statique apprise à partir de Java 8
IDE 2017 pour Java
Notes de pré-introduction pour les apprenants JavaScript expérimentés de Java
Une collection de questions simples pour les débutants Java
[Java] Est-il inutile de vérifier "l'identité" dans l'implémentation de la méthode equals ()?
Nom de méthode de la chaîne de méthodes dans Java Builder + α
référence de la méthode java8
[Java] Méthode aléatoire
[Introduction à Java] Bases de l'arithmétique Java (pour les débutants)
[Java] Présentation de Java
[Java] méthode de fractionnement
Java pour instruction
Examen et mise en œuvre de la bibliothèque CSV pour le chargement de grandes quantités de données dans MySQL (Java)
[Java] Mémo de méthode d'implémentation pour définir le jeton de nom d'utilisateur WS-Security dans SOAP Stub of axis2
[Lire Java efficace] Chapitre 3 Point 12 "Considérer l'implémentation de Comparable"
Obtenir une liste d'informations MBean pour les applications Java
Implémentation du traitement asynchrone pour un seul locataire dans Tomcat
[Pour les débutants] Comprendre rapidement les bases de Java 8 lambda
Initialisation de for Essayez de changer le problème Java en TypeScript 5-4
Exemple d'implémentation d'un système de traitement LISP simple (version Java)
Introduction à Java pour les débutants Connaissance de base du langage Java ①
Liste des instructions Java fréquemment utilisées (pour les débutants et les débutants)
Liens pour chaque version (version japonaise) de l'API Java SE
Comment exécuter l'exemple WebCamCapture de NyARToolkit pour Java