Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 30
  1. #1

    [JAVA] Il parametro formale THIS

    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 }

  2. #2
    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.

  3. #3
    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 parametri
    codice:
    public MyClass(int index)
    {
    this.index = index
    }
    ti 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 classe
    www.matteosteri.it

  4. #4
    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:
    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
        }
    }
    this.mioDato e' il dato privato della classe.
    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:
    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;
        }
    }
    Adesso se creo un'istanza dell classe MyClass:

    codice:
    ....
    MyClass ogg = new MyClass();
    ogg.setDato(5);
    System.out.println(ogg.getDato());//visualizza 0(zero)!!
    ...
    Questo e' dovuto al fatto che in fase di instanzazione
    ...= 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.

  5. #5
    Scusa non avevo visto la spiegazione di tommisceddu
    che comunque e' piu' che esaudiente!!
    ciao
    Nulla, ma e' sempre qualcosa.

  6. #6
    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.

  7. #7
    E' vero abbiamo fatto il giro della terra per guardarci
    il sedere, quando basta cambiare nome!!
    Nulla, ma e' sempre qualcosa.

  8. #8
    E' vero abbiamo fatto il giro della terra per guardarci
    il sedere, quando basta cambiare nome!!
    Nulla, ma e' sempre qualcosa.

  9. #9
    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 }

  10. #10
    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.

    codice:
    ...
    public void setDato(int mioDato){//omonimo nella classe
         this.mioDato/*membro di classe*/ = mioDato;//parametro formale
       }
    ...
    se non metti this nel corpo del metodo le variabili
    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.

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.