困扰已久变量名和实例的问题

废话不说看代码

class User{
    String name;
    String male;
    String city;
    Address address;


}

class Address{
    String street;
    String  zip;
   
}

 提问:

  怎么得到 类User 的实例中的field 名称 和实例的map 比如["name"=>name,"address"=>address]呢,请会的提示个思路!

再给你个详细的代码。
代码我尽可能缩在同一个文件里了。不建议你这样写代码。
你运行该代码时可能需要:
1.修改包名
2.导入Junit4类库

先说明一下。你的属性需要有get方法。这样才可以比较方便的注入取得数据。
注意其中的generateGetMethodName和generateFieldsMap
第一个方法,用来生成方法名
第二个方法,用来生成你需要的Map

你实际需要的是generateFieldsMap,参数为Object,这样你可以传递任何类进去

但是要注意一点:比如,你定义了属性sex,但是没有get方法,那么这个属性与值将无法取得。

自己对这些代码重构一下。基本的使用应该是没问题的。
你可以通过运行main,或是运行JUnit测试来查看结果。

[code="java"]
import static org.junit.Assert.assertEquals;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import org.junit.Test;

public class User {
private String name;
private String city;
private String sex;
public String getName() {
return name;
}

public String getCity() {
    return city;
}

public void setName(String name) {
    this.name = name;
}

public void setCity(String city) {
    this.city = city;
}

public static String generateGetMethodName(String field){
    String methodName = "get" + field.substring(0, 1).toUpperCase()
                            + field.substring(1);
    return methodName;
}

public static Map<String, Object> generateFieldsMap(Object obj){
    Map<String, Object> map = new HashMap<String, Object>();
    Field[] fields = obj.getClass().getDeclaredFields();
    for(Field field : fields){
        String methodName = generateGetMethodName(field.getName());
        try{
            map.put(field.getName(), getMethodValue(methodName,obj));
        }catch(Exception e){
            continue;
        }
    }
    return map;
}

public static Object getMethodValue(String methodName,Object obj) 
        throws SecurityException,NoSuchMethodException,
                IllegalArgumentException,IllegalAccessException,
                InvocationTargetException{
    Method method = User.class.getMethod(methodName, new Class[0]);
    return method.invoke(obj, new Object[0]);
}

public static void main(String[] args){
    User user = new User();
    user.setCity("ShangHai");
    user.setName("风花雪月饼");

    try{
        Map<String, Object> map = generateFieldsMap(user);
        Iterator<Map.Entry<String, Object>> it = map.entrySet().iterator();
        while(it.hasNext()){
            Map.Entry<String, Object> entry = it.next();
            System.out.println(entry.getKey()+" --> "+entry.getValue());
        }
    }catch(Exception e){
        e.printStackTrace();
    }
}

@Test
public void testGenGetMethodName(){
    String fieldName = "name";
    assertEquals("getName",generateGetMethodName(fieldName));
}

@Test
public void testGenFieldsMap() throws Exception{
    User user = new User();
    user.setCity("ShangHai");
    user.setName("风花雪月饼");
    Map<String, Object> map = generateFieldsMap(user);
    assertEquals(2,map.size());
    assertEquals("风花雪月饼",map.get("name"));
    assertEquals("ShangHai",map.get("city"));
}

}
[/code]

兄弟。。把问题描述清楚点吧。。。

你问的是不是java反射?
[code="java"]
import java.lang.reflect.Field;

public class User {
String name = "aaa";
String city = "bbb";

public static void main(String[] args) throws SecurityException, NoSuchFieldException{
    User user = new User();
    Class clazz = user.getClass();

    //获得所有定义的成员变量 
    Field[] fields = clazz.getDeclaredFields();
    for(Field field:fields){
        System.out.println(field.getName());
    }

    //获得name
    Field foeld = clazz.getField("name");
}

}[/code]