Setar Objeto Genérico

5 respostas
TiagoS

Criei um objeto genério, para receber o resultado da pesquisa do banco de dados, porém não consigo fazer os settings desse objeto.
Fiz assim:

String className = “com.teste.Usuario”;
Object obj = Class.forName(className).newInstance();

Como eu faria por exemplo isso

obj.getNome(“José”)”, por exemplo.

Fico muito grato com a ajuda de todos, pois estou parado no projeto por conta disso.

5 Respostas

G

Amigo obj é uma VARIAVEL do tipo Object que esta apontando para um OBJETO do tipo Usuario portanto OBJ nao pode ter o metodo getNome().

TiagoS

Caro gustavorozolin eu sei disso tanto é que se vc prestar atenção essa parte de código esta entra aspas, o que eu preciso saber é se existe algum jeito de setar os campos desse objeto, sendo que no momento que o mesmo recebe o tipo de objeto que vai ser eu já sei quais são os campos dele.

eberson_oliveira

Oi,

tente fazer um cast. Faça algo mais ou menos assim:

String className = "com.teste.Usuario"; 
Object obj = Class.forName(className).newInstance(); 

if ( obj != null ){ 
   //imaginando que o objeto Usuario tenha o metodo setNome
   Usuario usuario = ( Usuario ) obj;
   usuario.setNome( "Jose" );
}

[]s

sergiotaborda
eberson_oliveira:
Oi,

tente fazer um cast. Faça algo mais ou menos assim:

String className = "com.teste.Usuario"; 
Object obj = Class.forName(className).newInstance(); 

if ( obj != null ){ 
   //imaginando que o objeto Usuario tenha o metodo setNome
   Usuario usuario = ( Usuario ) obj;
   usuario.setNome( "Jose" );
}

[]s

Repare que isso é equivalente a fazer

Usuario obj = new Usuario();
usuario.setNome( "Jose" );

Acho que o TiagoS quer escreve o campo apenas sabendo o nome e não fazendo o cast.
Para isso vc precisa encontrar o modificador da propriedade

Class  type= Class.forName(className);
Object obj = type.newInstance(); 

Method m = type.getMethod("set" + nomePropriedade); 

m.invoke(obj, new Object[]{"jose"});

Porque o getMethod é sensivel ao case tvl vc queira mudar para

Class  type= Class.forName(className);
Object obj = type.newInstance(); 

Method[] methods = type.getMethods();
Method modificador;

for (Method m : methods){
   if(m.getParametersTypes().length == 1 &&  m.getName().equalsIgnoreCase("set" +  nomePropriedade) ){
        modificador = m;
        break;
  }

}
modificador .invoke(obj, new Object[]{"jose"});

como vamos iterar todos os métodos da classe, a comparação do length do parametros serve para acelerar esse processo já que o set tem que ter um e apenas um parametro.

TiagoS

sergiotaborda éra isso mesmo que eu precisava, estava a dias tentando fazer isso, muito abrigado mesmo, a vc e a todos que me ajudaram

Criado 30 de março de 2010
Ultima resposta 30 de mar. de 2010
Respostas 5
Participantes 4