tenho uma classe(barra) que será adicionada em diversas outras classes ao longo de minha aplicação… gostaria de saber se tem como eu identificar dentro dessa classe barra a que classe ela está adicionada…
Acho que isso é a função da documentação. Um diagrama de classes mostrando as dependências resolve. Mas nada impede que vc adicione um comentário dizendo onde ela é instanciada. Mas considere a documentação.
bem seu maresp!
eu conheço sim análise OO e UML e sei muito bem o que é um diagrama de classes… acontece que eu acho que vc não entendeu direito o meu problema, ou a minha dúvida…
eu sei qual classe esta adicionando a classe barra, afinal fui eu quem fiz essa chamada… e tenho um diagrama UML para me ajudar inclusive…
Acontece que tenho inúmeras classes chamando esta classe barra e quero saber como a classe barra pode identificar quem a chamou, em tempo de execução, pois preciso executar funções da classe que a instaciou assim que determinado evento ocorreu. Isso tem ser genérico. É possível? Como posso fazer isso? Espero ter me explicado direito agora.
Isso eh meio feio, Marcelo… podem acontecer alguns bugs bem sutis - por exemplo, o de vc ter duas classes com o mesmo nome (sim, isso acontece - basta carregar a mesma classe em dois ClassLoaders).
O melhor jeito seria imitar o modelo de eventos da Swing (que, na verdade, eh o modelo de eventos dos JavaBeans):
[code]public class Barra {
private List listeners = new ArrayList();
public Barra() { … }
public addBarraListener(BarraListener listener) {
this.listeners.add(listener);
}
public void doStuff() {
for(Iterator i = listeners.iterator(); i.hasNext(); ) {
((Listener) i.next()).doStuffPerformed(new BarraEvent("bar"));
}
}
}[/code]
public class Foo implements BarraListener {
public void doStuffPerformed(BarraEvent e) {
System.out.println(e.getName());
}
}
Aih eh decisao sua… se vc quer que os listeners sejam notificados quando qualquer instancia da classe Barra disparar um evento, marque o atributo como estatico, mas se vc quer que os listeners escutem apenas eventos disparados a partir de uma unica instancia de Barra, deixe como esta