Visualizzazione dei risultati da 1 a 8 su 8

Discussione: [ Java ] clonazione

  1. #1
    Utente di HTML.it L'avatar di C232
    Registrato dal
    Dec 2004
    Messaggi
    303

    [ Java ] clonazione

    ragazzi non ho capito come funziona bene la clonazione in Java.
    Potete farmi degli esempi di classi derivate che implementano l'interfaccia clonazione, e una classe singola che implementa l'intefaccia clonazione?
    C/C++

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,304
    Esempio di una classe che implementa Cloneable:
    codice:
    public class MiaClasse implements Cloneable {
       private int mioDato;
       public MiaClasse() { mioDato = 0; }
       public MiaClasse(int mioDato) { this.mioDato = mioDato; }
       public synchronized void clone() {
          MiaClasse mc = new MiaClasse(mioDato);
          return mc;
       }
    }
    Esempio di classe derivata:
    codice:
    public class MiaClasse2 extends MiaClasse {
       private int secondoDato;
       public MiaClasse2() { super(); secondoDato = 0; }
       public MiaClasse2(int secondoDato) {
          super(secondoDato);
          this.secondoDato = secondoDato;
       }
       public void setDato(int secondoDato) { this.secondoDato = secondoDato; }
       public synchronized void clone() {
          MiaClasse2 mc2 = null;
          try {
             mc2 = (MiaClasse2) super.clone();
             mc2.setDato(secondoDato);
          } catch (CloneNotSupportedException cnse) {
             // Non dovrebbe mai succedere perchè implemento Cloneable
             cnse.printStackTrace();
          }
          return mc2;
       }
    }
    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3
    Utente di HTML.it L'avatar di C232
    Registrato dal
    Dec 2004
    Messaggi
    303

    ...

    invece di synchronized non va Object?
    Un altra cosa se una classe derivata implementa la clonazione immediatamente anche la classe base la deve implementare?


    Grazie!
    C/C++

  4. #4
    Utente di HTML.it L'avatar di C232
    Registrato dal
    Dec 2004
    Messaggi
    303

    ...

    ho scritto una scemenza invece di sinchronized void non va solo Object?
    C/C++

  5. #5
    Un altra cosa se una classe derivata implementa la clonazione immediatamente anche la classe base la deve implementare?
    In Java tutte le classi sono derivate. Quindi la risposta dovrebbe essere no...
    Folle e' l'uomo che parla alla luna.
    Stolto chi non le presta ascolto.

  6. #6
    Utente di HTML.it L'avatar di C232
    Registrato dal
    Dec 2004
    Messaggi
    303

    ...

    dovrebbe? vorrei una risposta sicura
    C/C++

  7. #7
    Beh, ti conviene che la superclasse sia clonabile, in modo sa poter invocare super.clone() come nell'esempio di LeleFT
    In caso contrario, nella classe derivata dovresti prevedere anche del codice per clonare la parte di dati eredidata, ricordando che i membri non primitivi andrebbero a loro volta clonati...

    La mia risposta era puramente accademica: Object non e' clonabile, ma ovviamente (che io sappia) non ha nulla da clonare.
    Folle e' l'uomo che parla alla luna.
    Stolto chi non le presta ascolto.

  8. #8
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,304

    Re: ...

    Originariamente inviato da C232
    ho scritto una scemenza invece di sinchronized void non va solo Object?
    La scemenza l'ho scritta io. Il metodo andrebbe con la seguente firma:
    codice:
    public synchronized Object clone() {...}
    la parola chiave synchronized ti permette di implementare automaticamente la sincronizzazione nel caso la classe sia condivisa da più thread che hanno bisogno di utilizzare il metodo clone(). Ovviamente non è obbligatorio sincronizzarlo.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

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 © 2024 vBulletin Solutions, Inc. All rights reserved.