É possível realizar essa operação no JAVA?

Javeiros,
estou com uma dúvida na possibilidade de desenvolver uma lógica capaz de pegar o valor de um campo, de uma tabela, que não seja de forma fixa.

Explicando melhor:

Suponde que eu tenha na minha tabela os campos:

  • nomeUsuario
  • chaveRede
  • CPF
  • nacionalidade

Assim, terei no meu sistema (bean) os seguintes métodos:

  • getNomeUsuario
  • getChaveRede
  • GetCPF
  • getNacionalidade

Ok.
Caso eu queira o Nome do Usuário eu uso o método getNomeUsuario.

Mas isso está me limitando em uma funcionalidade que estou precisando desenvolver para um cliente.

Ele tem uma tabela onde, além de registrar diversas informações, precisa identificar o usuário responsável por aquele consumo.
Como identificar o usuário do consumo ? Poderemos (por exemplo) usar o seu nome. OU poderemos usar a sua chave de rede. OU, CPF , OU …

Eu não estava querendo deixar isso fixo no programa.
Quero disponibilizar uma tabela onde ele informe (parametrize) o campo na tabela que possui a informação do usuário.

Ele pode cadastrar, por exemplo, "chaveRede".

No programa eu montaria a STRING com o campo correto.


String nomeCampoQueIdentificaUsuario = <<Busca de uma tabela no BD>> ;
String campoIdentificacao = "get" + nomeCampoQueIdentificaUsuario;

Assim, na string campoIdentificacao eu teria o valor "getChaveRede"

Como poderei executar esse método???
Não sei em tempo de compilação o nome do método!!!

[color=red] Tem como realizar essa operação no java ? [/color]

Usando reflection. (tem um artigo aqui no GUJ).
Ou mesmo usando a API Apache Beans Util.

Como o danieldestro disse, existe como fazer isso e é por reflection. Mas acredito que para o seu caso utilizar reflection não é o mais indicado.

Você pode por exemplo criar interfaces getters e setters para um atributo id, por exemplo. Então para cada cliente você teria um id diferente.

Suas classes concretas também poderia ser instanciadas de modo dinamico, utilizando Strings em um arquivos de propriedades. Deste modo cada cliente teria sua implementação.

Eu acho que é isso que você precisa. Neste caso não vale muito a pena o uso de reflection. O que acredito ser de grande valor para você neste momento é dar uma olhada em Design Patterns.
Blz? :thumbup:

Obrigadão Rmarin e Daniel !!!

Acho que seria mesmo o reflection.
É o seguinte Rmarin, no meu caso, eu tenho todas as informações do usuário. Em um momento preciso de uma informação e em outro momento preciso de outra informação (de forma parametrizada) para cada consumo de gasto.

Vou pesquisar mais mas, pelo que ví até agora, acho que me atende.

O Java agora me surpreendeu. Lancei o desafio mas estava acreditando que não teria como fazer isso.
:lol: :lol: :lol: :lol: :lol: :lol: :lol: :lol: :lol: :lol:

[color=red]O reflection está presente no Java desde a versão 1.1.[/color]

Seguem alguns links para outros que passarem pela mesma necessidade minha:
http://java.sun.com/docs/books/tutorial/reflect/object/invoke.html
http://www.guj.com.br/java.tutorial.artigo.10.1.guj

Esse ultimo link é um artig do próprio Daniel Destro.
Mais uma vez, obrigado. 8)

A solução de usar interfaces e implementações por trás que te devolve o dados desejado, também é uma alternativa.

com certeza a melhor saída! já resolvi muita coisa assim.

Eu não entendi muito …
Tem como comentar um pouco mais sobre essa solução ?

Sua tabela no BD:

NOME, CPF, CHAVE, EMAIL, TELEFONE

Interface Java:

[code]public interface User {
public static final UserFactory FACTORY = new UserFactory();
/**

  • vai retornar o ID adequado
    */
    public String getId();

public void setNome(String nome);
public String getNome();

//…get e set dos outros campos
}[/code]

Factory:

public class UserFactory { public User getInstance( String campo ) { return new UserImpl( campo ); } }

Implementação:

[code]public class UserImpl implements User {
private String nomeCampoId;
private Method metodoId;

public UserImpl( String nomeCampoId ) {
this.nomeCampoId = nomeCampoId;
}

public String getId() {
if( metodoId == null ) {
String nomeMetodo = “get” +
nomeCampoId.substring(0,1).toUpperCase() +
nomeCampoId.substring(1);
metodoId = this.getClass().getMethod(nomeMetodo,new Class[0]);
}
Object ret = metodoId.invoke(this, new Object[0]);
return (String) ret;
}

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

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

//…get e set dos outros campos
}[/code]

Usando:

String nomeCampoId = "nome"; User usr = User.FACTORY.getInstance( nomeCampoId ); String id = usr.getId();

Algo mais ou menos assim. Fiz agora. Não me xingue se der pau!