我有一个类的实例,我想为其创建一个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));
}
}
答案 0 :(得分:0)
因为字段getFields
是getDeclaredFields
而不是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的帮助下,我可以按照以下步骤解决此问题:
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)); } }