对于下面的输入,我想调用它的各自的setter方法。 例如 输入:
name | age
abc | 32
bac | 43
以上输入将存储在“List<Map<String, String>>
”下,我应该能够找到“name”的setName和“age”的setAge,并将“abc”分配给setName,将32分配给setAge。 setName和setAge都在Java文件中声明。
我已经探索过BeanUtils和Reflection API,试图找到解决方案。
请分享您的意见以达到我的要求
答案 0 :(得分:0)
如果您的列表填充如下:
Map<String, String> m = new HashMap<>();
m.put("age","32");
m.put("name","abc");
list.add(m);
通过反射,您的代码应该是:
List<YourObject> resultList = new ArrayList<>(); // or List<Object>
for(Map<String, String> map: list){
YourObject obj = new YourObject();// or Object obj = Class.forName("package.YourObject").newInstance();
for(String key: map.keySet()) {
String method = "set" + key.substring(0,1).toUpperCase() + key.substring(1);
obj.getClass().getDeclaredMethod(method, String.class).invoke(obj, map.get(key));
}
resultList.add(obj);
}
答案 1 :(得分:0)
反射非常容易,如果你正在寻找它:
带有setter的对象:
public class ObjWithSetters {
private static final PrintStream out = System.out;
public void setName(String name) {
out.println("Setting the name: " + name);
}
}
以下是搜索方式:
public class FindSetter {
private static final Logger LOG = Logger.getLogger(FindSetter.class.getName());
public static void main(String[] args) throws Exception {
final Object myObject = new ObjWithSetters();
final Method[] methods = myObject.getClass().getMethods();
for(Method m : methods) {
if(m.getName().equals("setName")) {
m.invoke(myObject, "My name is Bob");
} else {
LOG.info("I found this method: " + m.getName() + " but it is not the setter I want");
}
}
}
}