Java - 查找给定输入键

时间:2016-05-09 16:50:15

标签: java apache-commons-beanutils

对于下面的输入,我想调用它的各自的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,试图找到解决方案。

请分享您的意见以达到我的要求

2 个答案:

答案 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");
            }
        }
    }
}