Java:将Class成员变量/值转换为Map-Reflection

时间:2018-07-19 05:20:40

标签: java reflection hashmap

我有一个类的实例,我想为其创建一个Map,该Map的每个类变量名都具有Key,而该类变量中的值是其Value?

我尝试使用以下内容,但似乎不起作用。它不会进入if()或else if()部分。而且地图仍然是空的。

有人可以在这里找出问题吗?谢谢

public class ClassA {
    private String optionOne = "1";
    private Int optionTwo = 2;

}


        Map<String, String> map = new HashMap<>();
        Map<String, Integer> mapInt = new HashMap<>();

        for (Field field : ClassA.class.getFields()) {
            field.setAccessible(true);
            if (field.getType().equals(String.class)){
                map.put(field.getName(), (String) field.get(object));
            } else if (field.getType().equals(Integer.class)) {
                mapInt.put(field.getName(), (Integer) field.get(object));
            }
        }

2 个答案:

答案 0 :(得分:0)

因为字段getFieldsgetDeclaredFields而不是Integer.class,所以将int.class更改为optionTwo,将int更改为Integer

Map<String, String> map = new HashMap<>();
Map<String, Integer> mapInt = new HashMap<>();

for (Field field : ClassA.class.getDeclaredFields()) {
    field.setAccessible(true);
    if (field.getType().equals(String.class)){
        map.put(field.getName(), (String) field.get(object));
    } else if (field.getType().equals(int.class)) {
        mapInt.put(field.getName(), (Integer) field.get(object));
    }
}

答案 1 :(得分:0)

在@zhh的帮助下,我可以按照以下步骤解决此问题:

  1. ClassA.class.getDeclaredFields()而不是ClassA.class.getFields()
  2. Integer.TYPE而不是Integer.class
 for (Field field : ClassA.class.getDeclaredFields()) {
                field.setAccessible(true);
                if (field.getType().equals(String.class)){
                    map.put(field.getName(), (String) field.get(object));
                } else if (field.getType().equals(Integer.TYPE)) {
                    mapInt.put(field.getName(), (Integer) field.get(object));
                }
            }