GUJ Discussões   :   últimos tópicos   |   categorias   |   GUJ Respostas

Método de uma classe sendo chamado por outras classes, e fazendo tratamentos diferentes


#1

Boa tarde pessoal,
Inicialmente criei este tópico: http://www.guj.com.br/29063-metodo-de-uma-classe-sendo-chamado-por-outras-classes-mas-fazendo-um-tratamento-diferente-de-acordo-com-a-classe-que-o-chamou
Mas por orientações, criei este novo aqui para melhor discussão.

Inicialmente postei:

Olá pessoal! Não sei se ficou claro pelo título, mas o que gostaria de fazer, é o seguinte: Tenho uma classe A com um método público, e outras duas classes, B e C, que chamam esse método, porém, quero fazer uma forma de diferenciar, dentro do método dessa classe A, qual é a classe que estaria chamando este método, para caso seja a classe B, ele irá fazer uma coisa e devolver um valor, mas se for a classe C ele dará um outro tratamento e devolverá outro valor.
Alguns pontos:
1.Não quero criar métodos diferentes nessa classe A, para cada um ser chamado por uma classe. Haveriam várias classes, e gostaria que todas chamassem pelo mesmo método.
2.Pensei em cada classe passar um dado qualquer por parâmetro, e daí esse método faria o tratamento adequado de acordo com o parâmetro passado. Mas novamente queria que cada classe apenas tivesse que saber o nome do método para chamar, sem ter que passar nada por parâmetro.
Portanto, procuro uma forma, algum recurso do java para identificar a classe que estaria chamando o método. Existe algo similar com o operador instanceof, mas pra isso já preciso ter o objeto criado, ou sendo passado em algum lugar, mas nesse cenário que estou dizendo não haveria isso.
Alguma sugestão? Obrigado.

Pelas sugestões dadas, sobre usar herança ou interface, não era bem o que buscava. Como o pessoal começou a questionar minha pergunta que talvez não tenha ficado muito clara, adicionei isso:

Bom pessoal, já que tem muita gente questionando essa minha dúvida, vou tentar esclarecer mais de onde cheguei nisso. Primeiro, ainda não desenvolvo sistemas, sou estudante ainda, então posso não ter muita noção de algumas boas práticas, mas minha dúvida surgiu mais por uma curiosidade de simplesmente saber se isso seria possível. Estava implementando um exercício do padrão Mediator, que basicamente tem uma classe onde se implementam todos os métodos usados por todas as classes 'amigas', e essas classes 'amigas' apenas chamam estes métodos. A implementação do código em si fica dentro dos métodos no Mediator, esta classe que deverá saber o que fazer. As demais classes apenas precisam saber qual é a assinatura do método para chamá-lo. Com isso, pensei, e se um método implementado nessa classe Mediator puder ser chamado por várias classes mas fazer uma ação diferente em relação à cada uma que o chamar? O que faria mais sentido: eu criar 10 métodos dentro dessa classe, cada um para ser chamado por uma classe diferente, sendo que as vezes com apenas uma linha mudaria em cada um? Ou ter um método só, e uma verificação dentro dele, para de acordo com a classe que o chamou, fazer uma coisa diferente? Por isso que vi que o exemplo do BSilva foi o que chegou mais perto disso pra mim. Realmente não tenho muita experiência prática, e gostaria de ouvir mais opiniões a respeito. Agora pelo que eu disse faz mais sentido ou ainda não? rs

A resposta do usuário BSilva, que chegou mais perto do que eu procurava, falava que teria que passar algo por parâmetro mesmo, e sugeriu passar a própria classe, algo como:

    public String mostraClasse(Class<?> clazz){
        String valor = "";
        // VALIDO DE ONDE VEM A CHAMADA !!
        if(clazz == ClassB.class) valor = "Classe BBBBBBB";
        if(clazz == ClassC.class) valor = "Classe CCCCCCC ";
        if(clazz == ClassD.class) valor = "Classe DDDDDDD ";
        return valor;
    }

Então, essa seria a melhor solução para este cenário? De um método que tem que ficar em uma classe específica, e que é acessado por diferentes classes mas faz um tratamento diferente para cada uma?
Obrigado.


#2