Object, como buscar métodos sem saber qual classe está referenciando?

7 respostas
MrDataFlex

Por ex:

tenho as classes com métodos diferentes, porem TODOS tem o método getNome:
pessoa
animal
carro

e um método exemplar, que recebe uma instancia de qlqer uma das classes acima:

private mostraNome(Object obj) { // aqui, eu paro, hehehe }

eu tentei… obj.getNome(); só que nem na lista de opções aparece (claro) …

alguém teria uma idéia ?

7 Respostas

R

2 opções, ou você define um interface e todos implementam ou você usa reflection.

[]´s

MrDataFlex

hmm valeu!

renandemelo

http://java.sun.com/docs/books/tutorial/reflect/object/invoke.html

T

O método clássico de resolver isso envolve interfaces. É o método mais claro e mais eficiente:

interface Nomeavel {
    public String getNome();
}
...
class Animal implements Nomeavel {
}
...
class Pessoa extends Animal implements Nomeavel {
    // note que como Pessoa extends Animal ela já automaticamente
    // implements Nomeavel, mas você pode explicitar isso na declaração.
}
...
class Carro implements Nomeavel {
}
...
private void mostraNome (Nomeavel n) {
     System.out.println (n.getNome());
}
...
mostraNome (new Animal ("cao"));
mostraNome (new Pessoa ("Mr. Dataflex"));
mostraNome (new Carro ("fusca"));
...
T

Não use reflection como quem usa uma chave de fenda para resolver todos os problemas (inclusive o de salário baixo, ou seja, ameaçando o chefe com uma chave de fenda).
Use-a apenas quando necessário, embora ela não seja tão “prejudicial” ao desempenho do seu sistema como era antigamente (no tempo do Java 1.3 ou anterior).

MrDataFlex

thingol:
O método clássico de resolver isso envolve interfaces. É o método mais claro e mais eficiente:

interface Nomeavel { public String getNome(); } ... class Animal implements Nomeavel { } ... class Pessoa extends Animal implements Nomeavel { // note que como Pessoa extends Animal ela já automaticamente // implements Nomeavel, mas você pode explicitar isso na declaração. } ... class Carro implements Nomeavel { } ... private void mostraNome (Nomeavel n) { System.out.println (n.getNome()); } ... mostraNome (new Animal ("cao")); mostraNome (new Pessoa ("Mr. Dataflex")); mostraNome (new Carro ("fusca")); ...

seria otimo usar polimorfismo… porém são 132 classes… é mt melhor usar reflection

valeu galera!

R

Melhor não, mais fácil :wink:

Criado 10 de abril de 2007
Ultima resposta 10 de abr. de 2007
Respostas 7
Participantes 4