Copier les questions du constructeur sur Java

Copier les questions du constructeur sur Java - Java - Programmation

Marsh Posté le 20-01-2023 à 07:06:13    

J'ai une question sur la construction de copie en Java. Considérez la classe suivante;
 
Dans le constructeur de copie, je peux dire new(Integer(other.id)) pour obtenir un nouvel objet entier transmis au constructeur, mais je ne peux pas dire new T(other.data) car le compilateur dira qu'il ne peut pas instancier le type T. Comment puis-je m'assurer que lorsque l'élément générique est construit par copie, il ne transmettra pas simplement une référence telle que les 2 objets partageront les données sous-jacentes.
 
De plus, dans la méthode getLinks, il fait un nouveau et crée un nouvel objet de la liste, mais est-ce que cela va copier en profondeur et créer un nouvel objet des éléments contenus dans la liste ou contiendra-t-il simplement des références aux éléments de liste d'objets existants tels que que vous avez 2 listes pointant toutes les deux vers les mêmes données. Voir ci-dessous les commentaires / code. Merci d'avance pour votre expertise.
 
 

Code :
  1. class DigraphNode<T> 
  2. {
  3.     Integer id;
  4.     T data;
  5.     ArrayList<DigraphNode<T> > links;
  6.     public DigraphNode(Integer i)
  7.     {
  8.         id = i;
  9.         links = new ArrayList<DigraphNode<T> >();
  10.     }
  11.     public DigraphNode(Integer i, T d)
  12.     {
  13.         id = i; data = d;
  14.         links = new ArrayList<DigraphNode<T> >();
  15.     }
  16.     public DigraphNode(DigraphNode<T> other)
  17.     {
  18.         other.id = new Integer(other.id);
  19.         other.data = other.data; // line in question
  20.         this.links=other.getLinks(); // also will create a new list with references
  21.                                      // or will it deep copy the items contained in the list?
  22.                                      // see getLinks() method below
  23.     }
  24.     public void setData (T d ) { data =  d; }
  25.     public void addLink (DigraphNode<T> n) { links.add(n); }
  26.     public void addLinks (ArrayList<DigraphNode<T> > ns) { links.addAll(ns); }
  27.     public ArrayList<DigraphNode<T> > getLinks()
  28.     {
  29.         return new ArrayList<DigraphNode<T> >(links);
  30.     }
  31.     public void printNode()
  32.     {
  33.         System.out.print("Id: " + id + " links: " );
  34.         for ( DigraphNode<T> i : links )
  35.         {
  36.             System.out.print(i.id + " " );
  37.         }
  38.         System.out.println();
  39.     }
  40. }

Reply

Marsh Posté le 20-01-2023 à 07:06:13   

Reply

Marsh Posté le 20-01-2023 à 08:50:43    

Tu dois écrire un constructeur de/par copie (copy constructor en anglais).
 
https://www.youtube.com/watch?v=6tjxxgxMwdI
 
Je te conseille d'apprendre convenablement les bases, parce que la question que tu poses fait partie des bases essentielles du langage. Procure-toi un vrai cours de Java. Un bouquin complet est "Penser en Java" de Bruce Eckel.


---------------
Les aéroports où il fait bon attendre, voila un topic qu'il est bien
Reply

Marsh Posté le 24-01-2023 à 13:01:16    

oui ok merci pour ton aide

Reply

Marsh Posté le 10-02-2023 à 16:53:37    

Avec le lien ci-dessous, tu peux apprendre les bases du langage Java
https://www.data-transitionnumeriqu [...] oi_sert-il


Message édité par Favien le 10-02-2023 à 16:55:36
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed