Então… Tenho uma associação bidirecional entre duas classses (ControladorPrincipal e ControladorClientes)
O ControladorPrincipal tem uma variavel chamada controladorClientes que instancia ControladorClientes enquanto ControladorClientes tem uma que instancia ControladorPrincipal. Eu preciso usar um método existente em ControladorPrincipal no ControladorCliente e o mesmo ocorre com o ControladorPrincipal. Como eu poderia resolver isso?
Eu não sei se consegui entender. Se precisa usar o método existente em outra classe, apenas use. O que está te impedindo disso? Os métodos estão como private?
Tentei colocar em código o que você descreveu, mas não consegui ver nenhum problema:
class ControladorPrincipal {
ControladorCliente controladorCliente = new ControladorCliente();
void metodoDosSonhos() { // <--- Método que você quer usar
System.out.println("Quero ser executado...");
}
}
class ControladorCliente {
ControladorPrincipal controladorPrincipal = new ControladorPrincipal();
void realizandoMeusSonhos() {
controladorPrincipal.metodoDosSonhos(); // <---- Usando o método que você queria usar
}
}
ControladorCliente controladorCliente = new ControladorCliente();
Ao instanciar o ControladorCliente (new ControladorCliente()), o ControladorCliente, em seu método construtor, instancia ControladorPrincipal
ControladorPrincipal controladorPrincipal = new ControladorPrincipal();
E, ai, volta ao inicio, fazendo esse loop eterno.
Eu felizmente já consegui a solução para esse problema:
Criar uma variavel do tipo ControladorPrincipal.
No método construtor do ControladorCliente, em vez de instanciar um ControladorPrincipal, receber um ControladorPrincipal como parametro e declarar a variavel do tipo ControladorPrincipal. No ContrladorPrincipal, instanciar o ControladorClientes passando como parametro ele mesmo, ‘this’.
ficaria
class ControladorPrincipal {
controladorCliente controladorCliente;
public ControladorPrincipal(){
controladorCliente = new ControladorCliente(this);
}
void metodoDosSonhos() { // <--- Método que você quer usar
System.out.println("Quero ser executado...");
}
}
class ControladorCliente {
ControladorPrincipal controladorPrincipal;
public ConstroladorCliente(ControladorPrincipal controladorPrincipal){
this.controladorPrincipal= controladorPrincipal;
}
void realizandoMeusSonhos() {
controladorPrincipal.metodoDosSonhos(); // <---- Usando o método que você queria usar