Salve a tutti!
Scusate... c'è qualcuno qui in grado di spiegarmi con parole molto spicciole ma chiare a cosa accipicchia serva il parametro THIS? ò_o Voglio dire: cos'è, come funziona?
Grazie in anticipo!
Salve a tutti!
Scusate... c'è qualcuno qui in grado di spiegarmi con parole molto spicciole ma chiare a cosa accipicchia serva il parametro THIS? ò_o Voglio dire: cos'è, come funziona?
Grazie in anticipo!
I'm going under (going under)
Drowning in you (drowning in you)
I'm falling forever (falling forever)
I've got to break through
I'm going under
{ GOING UNDER - Evanescence }
This é una parola riservata che viene usata per richiamare metodi/proprietà della classe .
Supponi di implementare un classe MyClass, puoi usare This.MioMetodo , anziché Class.MioMetodo.
oltre quello già detto ... (anche se non c'è bisogno di mettere il nome della classe per richiamare un metodo all'interno della classe stessa
MyMethod o MyVariable
invece che
MyClass.MyMethod MyClass.MyVariable
)
se hai un costruttore nel quale passi dei parametriti serve per fare la copia del parametro in ua variabile della classe, perchè altrimenti non si capirebbe quale index stai utilizzando, anche se java prenderebbe in considerazione quello della classecodice:public MyClass(int index) { this.index = index }
www.matteosteri.it
All'interno della definizione di una classe
qualifica i membri di dati all'interno della medesima,
e allo stesso tempo evita il fraintendimento com i membri
omonimi che si trovano sull'intestazione di un metodo
all'interno della classe.
es:
this.mioDato e' il dato privato della classe.codice:public class MyClass{ private int mioDato; //costruttori .... //metodi public void setDato(int mioDato){ this.mioDato = mioDato; } public int getDato(){ return mioDato;//per default this.mioDato } }
mioDato e'il mezzo di comunicazione con l'esterno
che si trova appunto nella signature del metodo:
public void setDato(int mioDato){...}.
Di solito e' il compilatore che inserisce this
per qualificare i membri pero' in caso di omonimia,
se non si specifica this,
si hanno i seguenti problemi:
Adesso se creo un'istanza dell classe MyClass:codice:public class MyClass{ private int mioDato; //costruttori .... //metodi public void setDato(int mioDato){ mioDato = mioDato;//il compilatore fa: this.mioDato = this.miodato } public getDato(){ return mioDato; } }
Questo e' dovuto al fatto che in fase di instanzazionecodice:.... MyClass ogg = new MyClass(); ogg.setDato(5); System.out.println(ogg.getDato());//visualizza 0(zero)!! ...
...= new MyClass();
mioDato all'interno della classe, non quello della signature del metodo, viene automaticamente inizializzato a zero.
Poi in fase di settaggio del dato mediante il metodo setDato(), se non hai inserito this riassegni lo stesso
valore di inizializzazione.
Quindi quando hai omonimia tra variabile della signature del
metodo e un membro della classe devi inserire this
per qualificare il membro di classe, anche se il compilatore
non ti impedisce di compilare il tutto.
Ciao
Nulla, ma e' sempre qualcosa.
Scusa non avevo visto la spiegazione di tommisceddu
che comunque e' piu' che esaudiente!!
ciao
Nulla, ma e' sempre qualcosa.
IN tutti questi casi, cmq, bastava cambiare nome a mioDato per risolvere...
Giusto per precisare: non sempre e' cosi'. A volte si sente proprio la necessita' che l'oggetto abbia un modo di riferirsi a se stesso, ad esempio se vuole richiamare un metodo (suo o di un altro oggetto) fornendo come parametro se stesso.
Folle e' l'uomo che parla alla luna.
Stolto chi non le presta ascolto.
E' vero abbiamo fatto il giro della terra per guardarci
il sedere, quando basta cambiare nome!!
Nulla, ma e' sempre qualcosa.
E' vero abbiamo fatto il giro della terra per guardarci
il sedere, quando basta cambiare nome!!
Nulla, ma e' sempre qualcosa.
Ma quanti cari ragazzi gentiluomini! Ehe! Grazie per le risposte!
Well, venendo al problema: diciamo che in qualche modo forse ho capito (ma correggetemi se sbaglio): in pratica ogni qual volta sarò costretta ad utilizzare nel corpo di un metodo un parametro che sì, si trova nell'intestazione del metodo stesso (cioè fra i parametri formali. Tra parentesi insomma) ma che contemporaneamente è stato dichiarato anche altrove... sarebbe opportuno e consigliabile che io legassi quel parametro nel corpo del metodo a THIS, per specificare che sto parlando DI QUEL parametro e non di un altro che si trova chissàdove e chissàperché? O.o Ho capito bene?
Non ho capito però bene la sua applicazione al caso delle classi Cioè: magari nemmeno il caso del metodo ho capito XD ma vabè... sono fiduciosa!
I'm going under (going under)
Drowning in you (drowning in you)
I'm falling forever (falling forever)
I've got to break through
I'm going under
{ GOING UNDER - Evanescence }
this si riferisce solo ed esclusivamente ai membri
della classe per evitare che un parametro formale
omonimo venga messo il this di default dal compilatore.
se non metti this nel corpo del metodo le variabilicodice:... public void setDato(int mioDato){//omonimo nella classe this.mioDato/*membro di classe*/ = mioDato;//parametro formale } ...
che sono parametri formali con lo stesso nome di qualche
membro della classe esso verra' qualificato dal compilatore
come membro di classe.
Ciao
Nulla, ma e' sempre qualcosa.