2010-03-22 13 views

risposta

7

Sfortunatamente, non esiste un modo affidabile per eseguire una copia profonda su un vettore di oggetti.

Solo una breve rassegna di ciò che ritengo sia una "copia profonda": una copia profonda è una copia in cui non solo sono copiati i contenuti di una raccolta (vettore, in questo caso), ma gli oggetti contenuti nel vettore sono copiati in modo indipendente. In altre parole: se il vettore V contiene A, e una copia (V ') di V è fatta, una copia di A (A') in V 'non è influenzata da nessuna modifica ad A e viceversa.

In genere, questo sarebbe implementato "clonando" un oggetto. Sfortunatamente, se non hai il controllo sugli oggetti nel Vettore, non hai un modo ragionevole di clonarli, specialmente dal momento che JavaME non possiede un'interfaccia Clonabile (per quanto ho potuto trovare).

Ovviamente, se si controllano gli oggetti, è possibile creare la propria interfaccia Cloneable che specifica un metodo clone() che restituisce una copia completamente indipendente dell'oggetto. Quindi, è necessario assicurarsi che il proprio vettore di clonazione speciale accetti solo oggetti che implementano tale interfaccia. Da lì, è abbastanza facile (in termini di codice) per te creare un vettore che possa clonare se stesso.

+0

Ahimè, era quello che temevo. Grazie. –

+0

Potrei implementare un'interfaccia clonabile, ma non sarebbe altrettanto veloce di qualcosa di nativo per J2ME. –

2

Sarà necessario copiare il contenuto del vettore con un ciclo.

Enumeration e = projects.elements(); 
while (e.hasMoreElements()) { 
    this.projects.addElement((Project) e.nextElement()); 
} 

bisogno di ulteriori informazioni vedi pagina 2 The Java Forum risposta 18, la risposta è lì.

+0

che fa una copia di ciascuno degli elementi. –

+0

@DanG è il meglio che puoi ottenere in J2ME, ti sei mai preoccupato di leggere i documenti vettoriali? http://en.wikipedia.org/wiki/Object_copy#Deep_vs._Shallow_vs._Lazy_copy se ho letto correttamente il codice che ho dato è una copia profonda, poiché i due vettori sono indipendenti. –

+0

una copia completa completa creerebbe copie di ciascun elemento secondario e ognuno di questi sotto-elementi secondari e così via lungo la struttura. In nessun punto deve essere copiato un riferimento a un oggetto; sempre una copia di ogni campo. Poiché stai copiando i riferimenti agli oggetti degli elementi, questa è una copia superficiale a quel livello. –

4

Poiché è stato contrassegnato come BlackBerry e non solo J2ME, è necessario menzionare che esiste una classe CloneableVector che fa parte delle API BlackBerry. Se si sta tentando di attenersi al rigore J2ME, questo sarà di scarsa utilità. Tuttavia, se stai mirando solo a BlackBerry, soddisfa le tue esigenze.

net.rim.device.api.util.CloneableVector documentation

+0

Questa è solo la versione 5.0. Al momento non ci sono molti dispositivi su 5.0. –

+0

Non è vero, è almeno 4.6 e non ho voglia di guardare più indietro per controllare quando è arrivato. Mi è appena capitato di indicare il documento 5.0. – Fostah

+0

Lavoro in 4.3 ... –

Problemi correlati