Pagina 1 di 5 1 2 3 ... ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 48
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2013
    Messaggi
    23

    Delucidazioni su "this"

    Ciao a tutti,
    Dopo aver letto e riletto tante guide JAVA non riesco a comprendere a pieno la funzione del riferimento "this". C'è qualcuno che può illuminarmi?

    Riporto diversi esempi chissà che magari spiegandomi questi, riesca a capire una volta per tutte

    codice:
    MultiAutoCompleteTextView mactv = (MultiAutoCompleteTextView)this.findViewById(R.id.multiautotxt1);
    ArrayAdapter<String> aa = new ArrayAdapter<String>(this,
    android.R.layout.simple_dropdown_item_1line, new String[] {"Inglese",
    "Spagnolo", "Tedesco", "Francese", "Italiano"});
    codice:
    Button btnvis = (Button)this.findViewById(R.id.btnprova);
    btnvis.setOnClickListener(new OnClickListener(){
    @Override
    public void onClick(View arg0) {
    }
    });
    codice:
    @Override
    public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    text = (TextView)this.findViewById(R.id.testo);
    EditText edit1 = (EditText)this.findViewById(R.id.edit1);
    E la differenza tra questi 2 codici sempre facendo riferimento particolare a "this"
    codice:
    public class MyButtonDemoActivity extends Activity { 
    @Override
    public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
     MyButton button = new MyButton(this); 
     button.setText("Toccami!"); 
     LinearLayout layout = new LinearLayout(this);
    codice:
    public class TwoButtonsDemoActivity extends Activity implements OnClickListener { 
    @Override
    public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     Button bottone01 = (Button) findViewById(R.id.bottone01); 
     Button bottone02 = (Button) findViewById(R.id.bottone02);
    bottone01.setOnClickListener(this); 
     bottone02.setOnClickListener(this); 
     }

    Grazie in anticipo

  2. #2
    Utente di HTML.it
    Registrato dal
    Sep 2012
    Messaggi
    442
    Perché non posti il codice indentato
    Quando passi come parametro a un metodo o a un costruttore una variabile con lo stesso nome di un campo, all'interno del corpo del metodo o del costruttore se usi quel nome di variabile stai usando quella del metodo, se vuoi usare quella di campo devi premettere il this al nome della variabile.
    Esempio:

    private static int x; //campo
    [vario codice]

    public static void mioMetodo (int x) {
    this.x=1; //riferisce il campo
    x=25*2; //riferisce la x di mioMetodo
    }

    Spero sia più chiaro ora

  3. #3
    Utente di HTML.it
    Registrato dal
    May 2013
    Messaggi
    23
    Ciao,
    Grazie per la risposta.
    Questo utilizzo in parte mi era chiaro.
    Non riesco ancora a capire la differenza di queste 2 parti di codice.. una contiene this e l'altra no.
    codice:
    MultiAutoCompleteTextView mactv = (MultiAutoCompleteTextView)this.findViewById(R.id.multiautotxt1);
    codice:
    Button bottone01 = (Button) findViewById(R.id.bottone01);
    Oppure l'utilizzare this come in questo caso:
    codice:
    ArrayAdapter<String> aa = new ArrayAdapter<String>(this,
    android.R.layout.simple_dropdown_item_1line, new String[] {"Inglese",
    "Spagnolo", "Tedesco", "Francese", "Italiano"});
    e questo:
    codice:
    MyButton button = new MyButton(this);

  4. #4
    Originariamente inviato da nixiam
    codice:
    MultiAutoCompleteTextView mactv = (MultiAutoCompleteTextView)this.findViewById(R.id.multiautotxt1);
    codice:
    Button bottone01 = (Button) findViewById(R.id.bottone01);
    Sono la stessa cosa, nel primo caso puoi anche omettere il this.
    codice:
    ArrayAdapter<String> aa = new ArrayAdapter<String>(this,
    android.R.layout.simple_dropdown_item_1line, new String[] {"Inglese",
    "Spagnolo", "Tedesco", "Francese", "Italiano"});
    e questo:
    codice:
    MyButton button = new MyButton(this);
    Bè qui stai cercando di confrontare due cose totalmente diverse intrensicamente. L'unica cosa che li mette insieme e che entrambe accettano nel costruttore come parametro un instanza della classe dal quale li stai richiamando.

  5. #5
    Utente di HTML.it
    Registrato dal
    May 2013
    Messaggi
    23
    Ciao, non era mia intenzione confrontare gli ultimi due codici, forse mi sono spiegato male.

    C'è un modo per sapere quel this in Button(this) così richiama e quel (this,....) cosa richiama?

    Purtroppo non riesco ad imparare a memoria una cosa senza capire cosa c'è sotto..

  6. #6
    il "this" si riferisce alla classe in cui lo stai usando:
    Es:
    codice:
    public class MyClass
    {
        public void metodo()
        {
            MyButton button = new MyButton(this);
         }
    }
    public class MyButton
    {
          //COSTRUTTORE
          MyButton(MyClass instance)
          {
          }
    }
    Più chiaro di cosi proprio non posso....

  7. #7
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    613
    Originariamente inviato da francesco.muia
    il "this" si riferisce alla classe in cui lo stai usando:
    Es:
    codice:
    public class MyClass
    {
        public void metodo()
        {
            MyButton button = new MyButton(this);
         }
    }
    public class MyButton
    {
          //COSTRUTTORE
          MyButton(MyClass instance)
          {
          }
    }
    Più chiaro di cosi proprio non posso....
    this non è un riferimento alla classe ma all'istanza della classe sul quale il codice sta operando. In generale non puoi sapere a priori la classe dell'oggetto al quale this fa riferimento, essa non è necessariamente quella all'interno della quale si sta usando la parola chiave this.

    Inoltre this è necessaria per la concatenazione dei costruttori e per ottenere (in caso di classi annidate) l'istanza che contiene quella sul quale si sta lavorando.

    http://docs.oracle.com/javase/tutori...O/thiskey.html

    http://stackoverflow.com/questions/5.../577582#577582
    effeffe

  8. #8
    Utente di HTML.it
    Registrato dal
    May 2013
    Messaggi
    23
    Ma quindi nel caso specifico non c'è differenza tra queste due istruzioni, giusto?

    codice:
    MyButton button = new MyButton(this);
    codice:
    MyButton button = new MyButton();

  9. #9
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    Mi pare che la differenza ci sia e sia anche enorme: nel primo caso passi un parametro al costruttore di MyButton, nel secondo no. Se la creazione dell'oggetto MyButton richiede un parametro, non puoi fare a meno di passarglielo... MyButton non è MyClass e non sa nulla di chi sia l'istanza che sta creando l'oggetto.


    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

  10. #10
    Utente di HTML.it
    Registrato dal
    May 2013
    Messaggi
    23
    non ci arrivo

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.