Visualizzazione dei risultati da 1 a 4 su 4

Discussione: Clone() in cascata

  1. #1

    Clone() in cascata

    Ho un oggetto A array di diverse altre collezioni d'oggetti.
    So che se faccio B come clone() di A le collezioni sottostanti rimangono condivise.
    Esiste un metodo per clonarmi completamente il mio oggetto A?

    Esempio di ciò che spiegavo:

    ArrayList X;

    ArrayList<X> A;

    ArrayList B = A.clone();

    Gli oggetti X rimangono condivisi.
    "Na' sedia te vojo tirà!"

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: Clone() in cascata

    Originariamente inviato da Brazonet
    So che se faccio B come clone() di A le collezioni sottostanti rimangono condivise.
    Sì perché le collezioni fanno una "shallow" copy, cioè creano una nuova collezione ma con gli stessi riferimenti agli oggetti nella collezione originale.

    Se gli oggetti contenuti nella tua collezione sono "immutabili" (es. String, Integer ecc...) di per sé non ci sarebbe alcun motivo per fare una "deep" copy .... tanto sono immutabili!!

    Se invece sono mutabili e/o ci sono altri motivi che non conosco, allora devi iterare sulla collezione, clonare uno per uno gli elementi (ammesso che siano clonabili) e inserire i nuovi oggetti nella nuova collezione.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3

    Re: Re: Clone() in cascata

    Originariamente inviato da andbin
    Sì perché le collezioni fanno una "shallow" copy, cioè creano una nuova collezione ma con gli stessi riferimenti agli oggetti nella collezione originale.

    Se gli oggetti contenuti nella tua collezione sono "immutabili" (es. String, Integer ecc...) di per sé non ci sarebbe alcun motivo per fare una "deep" copy .... tanto sono immutabili!!

    Se invece sono mutabili e/o ci sono altri motivi che non conosco, allora devi iterare sulla collezione, clonare uno per uno gli elementi (ammesso che siano clonabili) e inserire i nuovi oggetti nella nuova collezione.
    Ho appena fatto così e ha funzionato, solo che mi ha detto bene perché è bastato clonare i singoli oggetti dell'ArrayList di A.
    Mi chiedo però come sia fattibile quando si hanno collezioni di dati molto più complesse. :master:
    "Na' sedia te vojo tirà!"

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: Re: Re: Clone() in cascata

    Originariamente inviato da Brazonet
    Mi chiedo però come sia fattibile quando si hanno collezioni di dati molto più complesse. :master:
    Purtroppo non c'è un modo "generico" per clonare un qualunque oggetto o collezione. La questione è che in Object clone() è 'protected' e solo le sottoclassi che intendono davvero essere clonabili ridefiniscono clone() mettendolo 'public'.
    Per dirla in altre parole, solo avendo un reference ad un tipo ben specifico di cui si "sa" che ha il clone() pubblico, allora si può invocarlo.

    Si potrebbe usare la "reflection" ma rabbrividisco al pensarci ....
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.