Objeto de classe anônima acessando objeto externo

5 respostas
danieldestro

Meu código:

public class MinhaClasse {
  public void facaAlgo() {
    //algum codigo aqui
    new Thread() {
      public void run() {
        //como acessar o objeto de fora?
      }
    }
  }
}

Estava com dúvida de como acessar o objeto externo.

Mas resolví assim:

public class MinhaClasse {
  public void facaAlgo() {
    //algum codigo aqui
    new Thread() {
      public void run() {
        MinhaClasse.this.outraCoisa();
      }
    }
  }

  public void outraCoisa() {
    //nsdjkasndjkasnd
  }
}

5 Respostas

R

E´ so´ declarar o objeto como “final” no contexto acima :

private void test() { final Object o = new Object(); Thread t = new Thread() { public void run() { System.out.println(o); } }; }

danieldestro

Você não entendeu.
Eu queria acessar o objeto do método que iniciou a Thread. Eu conseguí. A solução foi o segundo código. Só coloquei aqui pra compartilhar com o pessoal.

R
danieldestro:
Meu código:
public class MinhaClasse {
  public void facaAlgo() {
    //algum codigo aqui
    new Thread() {
      public void run() {
        //como acessar o objeto de fora?
      }
    }
  }
}

Estava com dúvida de como acessar o objeto externo.

Mas resolví assim:

public class MinhaClasse {
  public void facaAlgo() {
    //algum codigo aqui
    new Thread() {
      public void run() {
        MinhaClasse.this.outraCoisa();
      }
    }
  }

  public void outraCoisa() {
    //nsdjkasndjkasnd
  }
}

setChato(true);

no código que vc postou, o MinhaClasse.this é opcional... uma chamada direta a outraCoisa() deve funcionar...

public class MinhaClasse {
  public void facaAlgo() {
    new Thread() {
      public void run() {
        outraCoisa();
      }
    };
  }
  public void outraCoisa() {
    //nsdjkasndjkasnd
  }
}

setChato(false);

valeu,
té+

danieldestro

setProblemaEspecífico( true );

No meu caso a classe externa tem um método destroy() e a Thread também. Como eu precisava chamar o método externo, então isso me serviu como uma luva de veludo no inverno glacial de Vladvostk.

setProblemaEspecífico( false );

R
interface Chato {}

public class ChatoSeFerrou implements Chato {}



Chato c = new ChatoSeFerrou();

hehe…

valeu,
té+

Criado 18 de fevereiro de 2005
Ultima resposta 18 de fev. de 2005
Respostas 5
Participantes 3