Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 18

Discussione: reference this

  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2014
    Messaggi
    315

    reference this

    Ho un po' di difficoltà a comprendere l'utilizzo del reference this.
    Vi posto il codice dell'esempio che non riesco a comprendere:
    codice:
    public class Cliente
    {
         private String nome, indirizzo, numeroDiTelefono;
       
         public void setNumeroDiTelefono(String numeroDiTelefono)
         {
                  this.numeroDiTelefono = numeroDiTelefono;
         }
         
         public void setIndirizzo(String indirizzo)
         {
                  this.indirizzo = indirizzo;
         }
    
         public void setNome(String nome)
         {
                  this.nome = nome;
         }
    }
    In questo caso dice che il compilatore non trova riferimento espliciti e quindi non restituisce il risultato desiderato.
    Se invece nelle stesse istruzioni le mettevano in un unico metodo (es. setDati) in quel caso non c'erano problemi.

    Mi spiegate questa cosa? Non riesco a capirla?

  2. #2
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    eh? quale sarebbe il problema?
    RTFM Read That F*** Manual!!!

  3. #3
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Nemmeno io.

    Nel senso che mi auguro che nel testo che stai seguendo, la cosa sia scritta in modo diverso... perchè scritte così, in modo così decontestualizzato, queste due frasi non hanno davvero nessun senso:


    il compilatore non trova riferimento espliciti e quindi non restituisce il risultato desiderato.
    Se invece nelle stesse istruzioni le mettevano in un unico metodo (es. setDati) in quel caso non c'erano problemi.

    Se, come penso, il libro sta parlando dell'uso del this per discriminare tra parametri dei metodi e campi di istanza, allora se ne può discutere, ma prima bisogna essere certi di cosa si sta parlando per evitare di generare troppa confusione.

    Rimane il fatto che, comunque, non cambia il fatto che si usino metodi distinti per ciascun campo o un metodo unico... e il compilatore non restituisce alcun risultato.


    Ciao.
    Ultima modifica di LeleFT; 07-11-2014 a 13:41
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  4. #4
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    certo caro moderatore, anche capire te è stata dura
    RTFM Read That F*** Manual!!!

  5. #5
    Utente di HTML.it
    Registrato dal
    Oct 2014
    Messaggi
    315
    Stiamo parlando del paragrafo relativo all'uso di this con le variabili.
    Il manuale fa questo esempio
    codice:
    public class Cliente
    {
         private String nome, indirizzo, numeroDiTelefono;
       
         public void setDati(String nome, String indirizzo, String numeroDiTelefono)
         {
                 this.nome = nome;
                 this.indirizzo = indirizzo;
                 this.numeroDiTelefono = numeroDiTelefono;
         }
    }
    In questo caso utilizzando this viene specificato che le variabili referenziate (nome, indirizzo e numeroDiTelefono) appartengono all'oggetto che va ad invocare il metodo setDati.

    Successivamente il manuale fa notare che se scrivessimo invece questo codice
    codice:
    public class Cliente
    {
         private String nome, indirizzo, numeroDiTelefono;
       
         public void setNumeroDiTelefono(String numeroDiTelefono)
         {
                  this.numeroDiTelefono = numeroDiTelefono;
         }
         
         public void setIndirizzo(String indirizzo)
         {
                  this.indirizzo = indirizzo;
         }
    
         public void setNome(String nome)
         {
                  this.nome = nome;
         }
    }
    il compilatore, non trovando riferimenti espliciti, considererebbe le variabili sempre locali e quindi non otterremmo il risultato desiderato.

    Io adesso mi chiedo, ma i due codici non sono equivalenti? La differenza sta che nel primo viene fatto in un'unico metodo, nel secondo invece in tre metodi separati. Alla fine la differenza quale sarebbe? Io direi solo che nel primo basterebbe invocare sull'oggetto un solo metodo (setDati), nel secondo invece bisognerebbe fare tre invocazioni separate sull'oggetto.

  6. #6
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Quote Originariamente inviata da newutente Visualizza il messaggio
    il compilatore, non trovando riferimenti espliciti, considererebbe le variabili sempre locali e quindi non otterremmo il risultato desiderato.
    Io continuo a sperare che nel libro ci sia scritto qualcosa di diverso (o nel codice, o nella spiegazione), perchè sta frase continua a non avere alcun senso.


    Io adesso mi chiedo, ma i due codici non sono equivalenti? La differenza sta che nel primo viene fatto in un'unico metodo, nel secondo invece in tre metodi separati. Alla fine la differenza quale sarebbe? Io direi solo che nel primo basterebbe invocare sull'oggetto un solo metodo (setDati), nel secondo invece bisognerebbe fare tre invocazioni separate sull'oggetto.

    Esattamente.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  7. #7
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Quote Originariamente inviata da valia Visualizza il messaggio
    certo caro moderatore, anche capire te è stata dura
    Sono stato contorto quanto basta, sì...
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  8. #8
    Utente di HTML.it
    Registrato dal
    Oct 2014
    Messaggi
    315
    Quella frase avrebbe senso se il codice fosse questo?
    codice:
    public class Cliente
    {
         private String nome, indirizzo, numeroDiTelefono;
       
         public void setNumeroDiTelefono(String numero)
         {
                  this.numeroDiTelefono = num;
         }
         
         public void setIndirizzo(String ind)
         {
                  this.indirizzo = ind;
         }
    
         public void setNome(String n)
         {
                  this.nome = n;
         }
    }

  9. #9
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    nemmeno.
    Credo che quella frase venga da una cattiva traduzione (per questo preferisco leggere in inglese i manuali).
    In linea generale la regola è: data la tua classe (per far prima), hai un campo di nome "indirizzo". Puoi, in qualsiasi metodo usare lo stesso nome per un parametro o per un'altra variabile. Tale pratica (che di fatto nasconde temporaneamente il campo) ha come effetto il bypass del campo. Nel tuo caso esplicitamente

    codice:
    private String indirizzo; 
    
    //bla bla 
    
    private void method(final String indirizzo){
    System.out.println(indirizzo);
    }
    ogni qualvolta dentro method tu parli di indirizzo, ti riferisci alla variabile locale (o meglio al parametro), quindi nessun effetto è prodotto sul campo. Se vuoi riferirti al campo, devi usare ESPLICITAMENTE this, quindi this.indirizzo non guarda al parametro, ma al campo.
    Il discorso è del tutto analogo se anziché parlare di un parametro parlassi di una variabile locale.
    Chiaro adesso?
    RTFM Read That F*** Manual!!!

  10. #10
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da newutente Visualizza il messaggio
    Quella frase avrebbe senso se il codice fosse questo?
    No, perché comunque "il compilatore non trova riferimento espliciti" vuol dire poco/nulla se non è chiaro perché lo sta dicendo e riferito a cosa.

    Quote Originariamente inviata da newutente Visualizza il messaggio
    codice:
    public class Cliente
    {
         private String nome, indirizzo, numeroDiTelefono;
       
         public void setNumeroDiTelefono(String numero)
         {
                  this.numeroDiTelefono = num;
         }
         
         public void setIndirizzo(String ind)
         {
                  this.indirizzo = ind;
         }
    
         public void setNome(String n)
         {
                  this.nome = n;
         }
    }
    Questo sarebbe corretto, salvo il fatto che nel primo metodo il parametro è "numero" mentre invece usi "num". Questo non c'entra niente con i riferimenti, è solo sbagliato un nome. Per il resto è corretto (non è tecnicamente necessario che nome di campo e di parametro coincidano, sebbene questa sia la convenzione comune e standard, per cui appunto serve il this).
    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.