NomeDaClasse.this [RESOLVIDO]

6 respostas
T

Alguém pode me explicar como a chamada "NomeDaClasse.this..." funciona? Por exemplo, no código abaixo:

public class Car {

    class Engine {
	        Engine(){ Car.this.drive();}
    }

    public static void main(String[] args) {
      new Car().go();
    }

   void go() {
     new Engine();
   }

   void drive() { System.out.println("hi"); }
 }

Eu não entendo o que ocorre exatamente na chamada "Car.this.drive()"...

6 Respostas

V

a instrução NomeDaClasse.this quer dizer que vc poderá acessar um membro ou método da instancia atual da sua classe…

T

Ainda não entendi direito vmsb11… :frowning: Tipo, o Car referencia a classe. E Car.this ? O que isso significa exatamente?

evertonsilvagomesjav

Thiago fiz uma pequena mudança pra vc entender melhor olha só:

public class Car {

	String nome;
	
	 class Engine {  
	         Engine(){ System.out.println(Car.this.nome);}  
	    }  
	   
	    public static void main(String[] args) {  
	      
	      new Car().go(); // Para essa instancia this.nome é null
	      //  ok? Seria o mesmo que new Car().nome;
	      
	      Car car = new Car();
	            
	      car.nome = "everton"; // Com essa instancia this.nome
	      // recebeu "everton" ok? Seria o mesmo que car.nome;
	      
	      Car.Engine eg = car.new Engine();
	    }  
	   
	   void go() {  
	     new Engine();  
	   }  
	   
	
}

Como dentro de um método statico temos que instanciar dessa forma a InnerClass:

Car car = new Car();          
car.nome = "everton";
Car.Engine eg = car.new Engine(); // o this que é usado equivale á o mesmo que a variavel "car"
E nesse caso:
new Car().go(); // aqui o this que  é usado é  o objeto sem referencia new Car();

ok?

ViniGodoy

Presta atenção no que ocorre:

public class Carro {
    public class Motor {
         public void turnOn() {
             System.out.println("Ligando o motor " + this.toString() + " do " + Carro.this.toString());
             System.out.println("Vruummm");
          }
          public String toString() {
             return "Turbo V8";
          }
     }

   private Motor motor = new Motor();

   public void ligar() {
      motor.turnOn();
   }

   public String toString() {
      System.out.println("Dodge");
   }

   public static void main(String args[]) {
      new Carro().ligar(); //Saída: "Ligando o motor Turbo V8 do Dodge"
   }
}

Note que na classe motor, se usassemos só this, estariamos falando do this do motor. Usar Carro.this, faz com que eu veja o this do carro. Por isso, essa notação só faz sentido no texto de uma classe interna, querendo acessar o this da externa que a agrega. E, claro, essa classe interna não pode ser estática.

T

humm, perfeito! Agora eu entendi! :thumbup:

Muito obrigado!!! :smiley:

lina

Oi,

Você pode adotar this como uma referencia de sua janela ou classe.

Carro.this -> Ou seja, você está utilizando uma referencia da classe carro.

Tchauzin!

Criado 1 de fevereiro de 2010
Ultima resposta 2 de fev. de 2010
Respostas 6
Participantes 5