有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

反射Java将变量列表转换为变量名到变量值的映射

假设我有几个变量:

public void foo() {
    String name = "Bob";
    String gender = "Male";
    Integer age = 6;
    String address = "some address";
}

我怎样才能把它们变成Map<String, Object>一样的东西呢

Map<String, Object> map = new HashMap<>();
map.put("name", name);
map.put("gender", gender);
map.put("age", age);
map.put("address", address);

而不是手动将它们插入地图。这可以通过反射来实现吗


共 (4) 个答案

  1. # 1 楼答案

    不要重新发明轮子 使用Json库解析对象

    示例(使用Gson…):

    public class GenericTypeData {
        private String name = "Bob";
        private String gender = "Male";
        private int age = 6;
        private String address = "some address";
        
        public GenericTypeData( ) {
            this.name = "Bob";
            this.gender = "Male";
            this.age = 6;
            this.address = "some address";
        }
    
        public static void main(String[] args) {
            System.out.println(new Gson().ToJson(this, GenericTypeData.class));
        }
    
    }
    

    你会得到一个类似json的

    {
        "name": "Bob",
        "gender": "Male",
        "age": 6,
        "address": "some address", 
    }
    
  2. # 2 楼答案

    如果你的变量是固定的,可以将一个类转换成map,那么你可以将它们转换成json

    您可以先准备包含变量的对象,然后使用toJson()方法将其转换为问题中指定的格式

    这个link可能有助于使用google gson library中的toJson()方法

  3. # 3 楼答案

    不,你必须手动把它们放到地图上。不可能使用反射来查找局部变量的名称或值