Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 21
  1. #1
    Utente di HTML.it
    Registrato dal
    Jul 2014
    Messaggi
    480

    Uso dele reference "this"

    Ciao a tutti,
    ho iniziato a studiare Java e sono arrivato ad un punto in cui non riesco a acapire bene l'utilizzo del reference "this".
    A quanto ho capito, permette di non referenziare in maniera esplicita un oggetto e consente l'utilizzo del valore corrente dell'oggetto stesso.
    Giusto?

  2. #2
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    this è un riferimento all'oggetto in cui ti trovi nel momento in cui lo usi.
    Lo usi ad esempio per dichiarare una variabile locale o un parametro con lo stesso nome di un attributo della classe.

    Ad esempio:

    codice:
    public class MyClass 
    {
        private String value;
    
        public MyClass(String value) 
        {
            this.value = value;   
            // value = value; ERRATO! L'attributo non viene modificato!
        }
    }
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  3. #3
    Utente di HTML.it
    Registrato dal
    Jul 2014
    Messaggi
    480
    Quindi, in questo caso se voglio utilizzare il metodo MyClass in due parti differenti di un programma, value conterrà il valore corrente nei due differenti casi?

  4. #4
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Ogni istanza di MyClass avrà una sua copia di value indipendentemente da this.

    this è "solo" una comodità per lo sviluppatore.
    Senza this dovrei avere attributi e parametri con nomi diversi e questo potrebbe generare confunsione.

    Se nell'esempio di prima scrivi questo

    codice:
    public MyClass(String inputValue) 
    {
        value = inputValue;
    }
    funziona uguale a prima.
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  5. #5
    Utente di HTML.it
    Registrato dal
    Jul 2014
    Messaggi
    480
    Quote Originariamente inviata da Alex'87 Visualizza il messaggio
    Ogni istanza di MyClass avrà una sua copia di value indipendentemente da this.

    this è "solo" una comodità per lo sviluppatore.
    Senza this dovrei avere attributi e parametri con nomi diversi e questo potrebbe generare confunsione.

    Se nell'esempio di prima scrivi questo

    codice:
    public MyClass(String inputValue) 
    {
        value = inputValue;
    }
    funziona uguale a prima.
    ok, quindi serve principalmente per non avere il proliferare di identificatori ?

  6. #6
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Non solo ovviamente, diciamo che quello è l'uso più immediato.

    Lo puoi usare per passare l'oggetto stesso ad un altro (ad esempio, nel caso di un listener).
    Oppure per richiamare un metodo di una classe esterna.
    Oppure ancora per richiamare un altro costruttore. Ad esempio:

    codice:
    public class MyClass 
    {
        private String value;
    
        public MyClass()
        {
            this("DEFAULT");
        }
    
        public MyClass(String value) 
        {
            this.value = value;   
       
            System.out.println(this.value);
        } 
    }
    
    new MyClass("PIPPO"); // stampa PIPPO
    new MyClass();        // stampa DEFAULT
    Qualche link per approfondire:

    http://stackoverflow.com/questions/5...f-this-in-java
    http://stackoverflow.com/questions/2...his-in-a-class

    Qui c'è qualche altro caso interessante: http://javarevisited.blogspot.it/201...-tutorial.html
    Ultima modifica di Alex'87; 22-08-2014 a 12:45
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  7. #7
    Utente di HTML.it
    Registrato dal
    Jul 2014
    Messaggi
    480
    Per esempio:
    codice:
    public Cliente (String nome, String indirizzo, String telefono) {
           this.setNome(nome);
           this.setIndirizzo(indirizzo);
           this.setTelefono(telefono);
    }
    in questo modo richiamo i metodi set di un'altra classe, giusto?

  8. #8
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    No, richiamerai i metodi di Cliente stesso.
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  9. #9
    Utente di HTML.it
    Registrato dal
    Jul 2014
    Messaggi
    480
    Quote Originariamente inviata da Alex'87 Visualizza il messaggio
    No, richiamerai i metodi di Cliente stesso.
    Nel senso che i metodi set devono essere necessariamente all'interno della classe Cliente ?

  10. #10
    Utente di HTML.it
    Registrato dal
    Jun 2014
    Messaggi
    17
    Ciao, la keyword this fa riferimento all'oggetto a cui un metodo o costruttore appartiene.
    Ciò vuol dire che non può essere usata nei metodi di classe (quelli static).
    Nel caso in cui la keyword this non sia necessaria è più bello non usarla (anche se il suo utilizzo non crea problemi).
    Alcuni esempi:
    Questo è un esempio dell'uso di this
    codice:
    public class A {
               String s;
               public A(String s) {
                    this.s = s;
               }
    
               public void print() {
                     System.out.println(s);
               }
    
               public static void main(String[] args) {
                     A a = new A("Hello World");
                     a.print();
               }
    }
    Questo da errore perchè un metodo static non "appartiene" a nessun oggetto, this non può quindi essere usata.
    (Cannot make a static reference to the non-static method print)
    codice:
    public class A {
           public static void main(String[] args) {
                   this.print();
           }
           
           public void print() {
                   System.out.println("Hello World");
           }
    }

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.