Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    Copie dinamiche di variabili di classe

    Buongiorno a tutti,
    vorrei sapere se è possibile creare copie dinamiche di variabili di classe (ossia definite con
    static ).

    In pratica avendo una libreria (statica) di oggetti, dovrei poterne "prendere" uno e modificarlo localmente (facendone una copia dinamica appunto) senza che l'oggetto in libreria ne rifletta i cambiamenti.

    Sembra che la semplice copia non lo consenta. Dovrei implementare Cloneable nell'ogetto della libreria in questione?

    Grazie,
    Stefano

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

    Re: Copie dinamiche di variabili di classe

    Originariamente inviato da cookd
    vorrei sapere se è possibile creare copie dinamiche di variabili di classe (ossia definite con
    static ).

    In pratica avendo una libreria (statica) di oggetti, dovrei poterne "prendere" uno e modificarlo localmente (facendone una copia dinamica appunto) senza che l'oggetto in libreria ne rifletta i cambiamenti.

    Sembra che la semplice copia non lo consenta. Dovrei implementare Cloneable nell'ogetto della libreria in questione?
    No alt .... di un membro "di classe" ne esiste sempre e solo 1 per una certa classe, indipendentemente da quante siano le istanze (oggetti) di quella classe.
    La "copia" quindi non ha senso per variabili di classe .... e non so cosa devi fare di preciso, ma sopratutto il perché e chi te lo ha detto ....

    E poi che vuol dire "libreria (statica) di oggetti"???
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Spiego meglio (o almeno ci provo):

    - definisco una classe che estende ArrayList e che contiene geometrie renderizzabili
    - vorrei accedere ad un elemento dello stack in modo statico, farne una copia in un'altro punto del programma senza che l'elemento nello stack ne venga alterato (segue implementazione dello stack)

    codice:
    public class RenderStack extends ArrayList<RenderableGL> {
        private static RenderStack stackDefault;
        
        public RenderStack() {
    	stackDefault = this;
        }
        
        public static RenderStack getDefault() {
    	return stackDefault;
        }
    
        public void push(RenderableGL r) {
    	stackDefault.add(r);	// add to stack
        }
    
    }
    PS attualmente eseguendo RenderableGL r = RenderStack.getDefault().get(i); e modificando r modifico anche l'elemento nello stack. Vorrei che le modifiche riguardassero solo r.

    Grazie,
    Stefano

  4. #4
    Utente di HTML.it L'avatar di neroux
    Registrato dal
    Aug 2009
    Messaggi
    1,973
    Se RenderableGL implementi l'interfaccia Cloneable potresti fare

    codice:
    RenderableGL r = RenderStack.getDefault().get(i).clone();

    www.sitemeer.com » Quando un sito pare irraggiungibile

    Se ti piace ci puoi trovare anche su Facebook

  5. #5
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da cookd
    codice:
    public class RenderStack extends ArrayList<RenderableGL> {
        private static RenderStack stackDefault;
        
        public RenderStack() {
    	stackDefault = this;
        }
        
        public static RenderStack getDefault() {
    	return stackDefault;
        }
    
        public void push(RenderableGL r) {
    	stackDefault.add(r);	// add to stack
        }
    
    }
    Non ha granché senso ....
    Il campo stackDefault è 1 solo e per cosa hai fatto nel costruttore vuol dire che puoi creare solo 1 istanza dell'oggetto RenderStack (altrimenti una seconda istanza cambia quel campo!) e già questo non ha molto senso. Se volevi fare un "singleton" si fa diversamente ...

    Originariamente inviato da cookd
    PS attualmente eseguendo RenderableGL r = RenderStack.getDefault().get(i); e modificando r modifico anche l'elemento nello stack. Vorrei che le modifiche riguardassero solo r.
    Allora qui non centrano le cose "di classe". Centra il fatto che la tua classe RenderableGL è "mutabile" e ovviamente facendo così hai il reference diretto all'oggetto nella collezione. E se è "mutabile" appunto puoi alterarne lo stato.
    Semplicemente fai in modo che RenderableGL sia in grado di fornire una "copia" dell'oggetto. E questo si può fare in diversi modi. Con un semplice costruttore "di copia", con un tuo metodo es. creaCopia() o seguendo la filosofia standard di Cloneable e clone().
    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.