PDA

Visualizza la versione completa : [java] proprietÓ dipendenti


Leandro
16-03-2005, 12:23
Sono ancora qua.

il codice Ŕ pi¨ o mno questo


public final class Parser{

Vector temp;

public void Parser(){
...operazioni..
}

public boolean languageParser(String content){

Vector elemento = new Vector();
... operazioni ...
this.temp = elemento;
countBrackets(elemento);

}

/* Ricorsiva */
private void countBrackets(Vector elemento){

... operazioni ...
elemento.remove();
countBrackets(elemento);

}
}


il problema Ŕ che quando faccio elemento.remove(i) in countBrackets mi viene eliminato lo stesso elemento in temp, ovviamente vorrei evitarlo.
Temp Ŕ coinvolto solo nell'assegnazione = elemento, e poi non viene utilizzato in nessun'altra operazione (per il momento, risolto sto problema potrÓ entrare in gioco :) )

Un aiuto?

dekdek
16-03-2005, 13:22
Vediamo se ho capito bene...

Tu vorresti fare una copia di elemento in temp, in modo che quando modifichi elemento, hai comunque la copia intatta in temp? E' giusto?

In tal caso non puoi usare l'assegnazione. Infatti scrivendo:



temp = elemento


stai semplicemente dicendo che temp deve puntare allo stesso oggetto puntato da elemento.
Se vuoi una copia separata puoi generare un nuovo oggetto in questo modo:



temp = new Vector (elemento);


Cosi', temp punta ad un nuovo oggetto che viene semplicemente inizializzato con i valori contenuti in elemento, ma non ha nessun collegamento con esso.

Spero di non aver scritto troppe cavolate. :)

Leandro
16-03-2005, 13:27
Niente minkiate, c'hai ragione... e quando c'hai ragione non c'Ŕ niente da fare se non dartela... Grazie! :D

dekdek
16-03-2005, 14:06
Eheheh... Menomale! :ciauz:

Leandro
16-03-2005, 15:15
Mi Ŕ venuto un dubbio ora

se una delle proprietÓ di questa classe Ŕ content e io all'interno di un metodo faccio:


/** posso fare questo? */
String content = this.content;

/** o devo fare questo? */

String c = this.content;


faccio riferimento alla proprietÓ della classe piuttosto che ad una variabile locale definita all'interno del metodo vero?

quindi dovrei fare?


String c = new String(this.content);


E poi, anche se in fin dei conti si tratta di prendere delle porzioni della stringa in 'this.content' senza modificarla, Ŕ pi¨ corretto crearne una locale come nel codice qui sopra, e lavorarci?

Arigrazie

dekdek
16-03-2005, 15:32
No, se non la devi modificare, e sai che in quel metodo non la modificherai mai, e' corretto usare il campo content della classe.

Se usi lo stesso nome di una variabile membro per la variabile locale, come gia' hai fatto, sei poi costretto ad usare il this per accedere al campo della tua classe, sempre che tu ne abbia bisogno. Altre controindicazioni non ce ne sono.
Ovviamente l'oggetto puntato dalla variabile locale e' sempre lo stesso. Pero' in certi casi torna utile.

Leandro
16-03-2005, 15:35
Fiiiico... quando passi per macerata ti pago una bevuta :fagiano:

LeleFT
16-03-2005, 15:45
Anche se lo modifichi non ti crea problemi. Prova, ad esempio, questo programma:


public class Prova {

private String testo;

public Prova(String testo) { this.testo = testo; }

public static void main(String [] a) {
Prova p = new Prova("Ciao");
p.richiama();
}

public void richiama() {
String testo = this.testo;
testo = "Cambiata";
stampa();
}

public void stampa() { System.out.println(testo); }
}
Ma credo che la cosa valga solamente per le stringhe (e in questo caso, infatti, Ŕ come richiamare un nuovo costruttore).

PS: per creare una copia del Vector puoi anche utilizzare il metodo clone() in questo modo:


Vector copia = (Vector) vettore.clone();

Ciao. :ciauz:

dekdek
16-03-2005, 15:47
Ci conto!!! :)

http://www.smileys.ws/sm/food/00000004.gif

Leandro
16-03-2005, 15:48
Insomma vi volete ubriacare a mia spese... ditelo allora :D

Loading