Visualizzazione dei risultati da 1 a 3 su 3

Discussione: [JAVA] Quesito su this

  1. #1

    [Java][Newbie]Quesito su this

    ono veramente alle prime armi con java, mi spiegate perchè nel seguente
    codice :

    **************************************************
    public class ProducerConsumerTest {
    public static void main(String[] args) {
    Cubbyhole c = new CubbyHole();
    Producer p1 = new Producer(c, 1);
    Consumer c1 = new Consumer(c, 1);

    p1.start();
    c1.start();
    }
    ....
    ....
    }


    public class Producer extends Thread {
    private Cubbyhole cubbyhole;
    private int number;

    public Producer(Cubbyhole c, int number) {
    cubbyhole = c;
    this.number = number;
    }
    public void run(){
    for(int i=0; i<o; i++) {
    cubbyhole.put(i);
    System.out.println("Producer #" + this.number + " put: " +i);
    try {
    sleep((int)(Math.random() * 100));
    } catch(interruptedException e) {}
    }
    }
    }

    public class Consumer extends Thread {
    private CubbyHole c;
    private int number;

    public Consumer(CubbyHole c, int number){
    cubbyhole=c;
    this.number = number;
    }

    public void run() {
    //segue codice analogo alla classe Producer
    }
    }
    ****************************************


    usa nei costruttori di Producer e Consumer solamente
    cubbyhole = c;
    this.number = number;

    e non

    this.cubbyhole = c;
    this.number = number;

    cubbyhole è una classe con metodi get e put sincronizzati e wait e signal
    per la sincronizzazione.
    ----------------
    webmaster di www.savethecube.it

  2. #2
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    java è case sensitive: Cubbyhole è diverso da cubbyhole, ad esempio.

    Nel tuo caso, hai una classe che dichiara un campo "number", lo stesso costruttore della classe ha come firma "int number"

    this.number si riferisce al campo number definito nella classe, a cui vai ad assegnare il valore "number" passato al costruttore (int number).

    Questo fa la stessa cosa:

    codice:
    public Producer(Cubbyhole c, int n) { 
      cubbyhole = c; 
      number = n; 
    }
    dove ometto "this" (non c'è altro "number" oltre al campo "number" dichiarato nella classe, per cui non ci sono problemi di omonimia e il riferimento esplicito può essere pure omesso)

    Altro esempio:

    codice:
    public Producer(Cubbyhole cubbyhole, int number) { 
      this.cubbyhole = cubbyhole; 
      this.number = number; 
    }
    Di nuovo, ottieni lo stesso risultato (perchè?)
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  3. #3
    Perfetto! per cui il this in this.number viene usato per risolvere l'ambiguità col parametro del costruttore... ambiguità che non c'è per la variabile cubbyhole.

    Grazie mille
    ----------------
    webmaster di www.savethecube.it

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.