Obter valor de um field por reflexao

Olá a todos…

Bom pessoal, eu tenho uma classe Enderecos, eu declarei um HashMap como public e no construtor eu seto as chaves e seus devidos valores, a intenção é criar nomes simbólicos para os nomes dos atributos declarados nessa classe.

[code]public HashMap atributos = new HashMap();

public Enderecos() {
inserirValores();
}

private void inserirValores() {
atributos.put(“endereco”, “Endereço”);
atributos.put(“numero”, “Número”);
atributos.put(“cep”, “CEP”);
atributos.put(“caixapostal”, “Caixa”);
}
[/code]

O que eu quero agora é obter o valor desse HashMap através de reflexao, estou utilizando o código abaixo.

public void teste(Object bean) {
    Class classe = null;
    try {
        classe = Class.forName(bean.getClass().getName());
        Object obj = classe.newInstance();
        Field campos[] = obj.getClass().getDeclaredFields();
        for (Field f : campos) {
            if (f.getType().getName().equals("java.util.HashMap")) {
                //Object value = f.get(new HashMap());
                HashMap value = (HashMap) f.get(new HashMap());
            }
        }        
    } catch (InstantiationException ex) {
        ex.printStackTrace();
    } catch (IllegalAccessException ex) {
        ex.printStackTrace();
    } catch (ClassNotFoundException ex) {
        ex.printStackTrace();
    }
}

já tentei fazer de algumas maneiras diferentes como:

Object o = new HashMap(); Object value = f.get(o);
mas eu nao to conseguindo, sempre caio na excessao:

[quote]java.lang.IllegalArgumentException: Can not set java.util.HashMap field beans.Enderecos.atributos to java.util.HashMap
[/quote]
Alguem tem alguma idéia de como posso obter o valor desse HashMap da classe q eu passo por parametro?

Desde já obrigado !! T+

import java.util.*;
import java.lang.reflect.*;

class Enderecos {
    public Map<String, String> atributos = new HashMap<String, String>();

    public Enderecos() {
        inserirValores();
    }

    private void inserirValores() {  
        atributos.put("endereco", "Endereço");  
        atributos.put("numero", "Número");  
        atributos.put("cep", "CEP");  
        atributos.put("caixapostal", "Caixa");   
    } 

    public static void main(String[] args) throws NoSuchFieldException, IllegalAccessException {
        Enderecos end = new Enderecos();
        // Obter o campo "atributos" por reflection
        Class<?> klass = end.getClass();
        Field fld = klass.getDeclaredField ("atributos");
        // Agora vamos obter o valor do campo "atributos" do objeto end.
        // Acho que você se confundiu na hora de saber que objeto era para passar para o método get.
        Object obj = fld.get (end);
        // Deve ser um Map<String, String>.
        @SuppressWarnings ("unchecked") Map<String, String> atr = (Map<String, String>) obj;
        // Agora vamos listar o hashmap.
        for (Map.Entry<String,String> entry : atr.entrySet()) {
            System.out.println (entry.getKey() + "->" + entry.getValue());
        }
    }
}

Grande thingol, blz cara funcionou certinho !!!

Realmente, eu pensei q tivesse que passar um objeto do tipo do atributo q eu queria obter o valor, no caso o HashMap, mas agora eu entedi.
O metodo get, busca no objeto que recebe, o valor do Field usado para chamar o metodo get.

Vlw cara t+