Reflect

4 respostas
J

alguém sabe como eu faço para obter o valor do campo abaixo?

Field[] fields = getClasse().getDeclaredFields();  
	        for (int i = 0; i<fields.length; i++){  
	            
	        	if (fields[i].getName().equals("getId")) {
					
	        	// preciso saber o valor em Long referente ao getId
	        		
				}
	        	
	        }

4 Respostas

jonasjgs2

jjunder.cunha,
para vc pegar o valor deste campo
na sua classe vc deve ter o método “getId”

e vc deve usar o Method do reflection
da uma procurado no google
java reflection Method

e vc ira achar vários exemplos…

J

Eu tenho, foi até citado acima, já tentei de varias formas mais não estou conseguindo.

jonasjgs2

jader vou te mandar um exemplo de como vc fazer isso
esta classe eu pego um recordset e transformo em um list de qualquer tabela

este exemplo eu utilizo e funciona muito bem...
com isso vc vai ver como funciona
e um exemplo muito completo...
com certeza isso vai resolver seu problema...
agora se vc além disso quiser um suporte agente pode negociar. mas acho que com este exemplo vc vai dar conta...

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package testes;

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

/**
 *
 * @author Jonas
 */
public class TransfRsEmList {

    public List<Object> Transf(ResultSet rset, Class c)
            throws SQLException, IllegalAccessException, NoSuchMethodException,
            IllegalArgumentException, InvocationTargetException,
            InstantiationException {

        List<Object> list = new ArrayList<Object>();


        while (rset.next()) {
            Object obj = c.newInstance();
            for (Method m : c.getMethods()) {
                if (m.getName().substring(0, 3).equals("set")) {
                    Class[] args1 = new Class[1];
                    Class pvec[] = m.getParameterTypes();
                    String s = m.getName().substring(3, m.getName().length());

                    if (pvec[0].getName().equals("java.lang.String")) {
                        args1[0] = String.class;
                        obj.getClass().getMethod(m.getName(), args1).invoke(obj, rset.getString(s));
                    }

                    if (pvec[0].getName().equals("int")) {
                        args1[0] = int.class;
                        obj.getClass().getMethod(m.getName(), args1).invoke(obj, rset.getInt(s));
                    }

                    if (pvec[0].getName().equals("long")) {
                        args1[0] = int.class;
                        obj.getClass().getMethod(m.getName(), args1).invoke(obj, rset.getLong(s));
                    }
                }
            }
            list.add(obj);
        }
        return list;
    }
}
Marky.Vasconcelos

Você precisa de um objeto instanciado para pegar o valor dele.

Objeto obj = new Objeto(11);//id=11
Field[] fields = getClasse().getDeclaredFields();  
	        for (int i = 0; i<fields.length; i++){  
	            
	        	if (fields[i].getName().equals("getId"))					System.out.println(fields[i].get(obj);

	        	
	        }

PS: Fields são os atributos da classe, getId se parece nome de método, onde o atributo provavelmente se chama apenas ‘id’.

Criado 3 de junho de 2015
Ultima resposta 9 de jun. de 2015
Respostas 4
Participantes 3