Como faço mapeamento de métodos por String

4 respostas
Luiz_Henrique_Coura

Existe uma maneira de ligar uma String com um método de um objeto?

Explicando melhor:

Tenho uma classe chamada Cliente:
public class Cliente{
    private String nome;
    private String end;

    public void setNome( String nome ) { this.nome = nome; }
    public String getNome() { return nome; }

    public void setEnd( String end ) { this.end = end; }
    public String getEnd() { return end; }

A minha idéia seria ligar um nome a um método set ou get, assim:

Hashtable ht = new Hashtable();
ht.put( "Nome", <método nome de meu objeto> );
ht.put( "End", <método end de meu objeto> );

A minha intensão seria executar o método correto de acordo com a string passada. Não gostaria de colocar um monte de IF pra lá e pra cá somente para apontar o lugar correto. Sem contar q qd eu adicionar um novo atributo na minha classe eu teria q adicionar um outro IF para apontar para um SET ou GET corretos.

Valeu!

4 Respostas

TedLoprao

O BeanUtils da jakarta não resolve o seu problema?

http://jakarta.apache.org/commons/beanutils/

urubatan

da uma estudada na API de reflection do java,
principalmente em java.lang.Class e nas classes do pacote java.lang.reflect

Rafael_Steil

Com reflaction basica vc consegue isso:

Client c = new Client();
c.getClass().getMethod("nomeDoMetodo", null).invoke(c, null);

Se tiver parametros a passar, a chamada vai ser um pouco diferente. De uma olhada na documentacao dos respectivos metodos para ter uma ideia melhor.

Rafael

Luiz_Henrique_Coura

Ae Pessoal!

Aproveitei para estudar o artigo de Reflection q tem aqui no GUJ. Muito bom e interessante!

Tb dei uma olhada no projeto BeanUtils da Jakarta. Tb é muito bom! Então eu fiz assim:

Minha classe Cliente:
public class Cliente{
    private String nome;
    private String end;

    public void setNome( String nome ) { this.nome = nome; }
    public String getNome() { return nome; }

    public void setEnd( String end ) { this.end = end; }
    public String getEnd() { return end; }
Meu teste:
public class Teste {
    public static void main( String[] args ) {

        //Minha classe Cliente
        Cliente cliente = new Cliente();

        //Classe do projeto BeanUtils da Jakarta para popular beans
        BeanUtils beanUtils = new BeanUtils();

        beanUtils.setProperty( cliente, "nome", "Luiz" );

        System.out.println( cliente.getNome() );
    }
}

A saída será o nome Luiz que pedi para ele "settar" utilizando a propriedade nome. ( setNome() )

Valeu galera!

Criado 24 de fevereiro de 2005
Ultima resposta 24 de fev. de 2005
Respostas 4
Participantes 4