我正在接受一系列方法,我想将它们链接在一起以修改我正在使用的对象。
例如我从
"getStuff().get(1).get(3).setMoreStuff().put(stuff,6)"
我将它拆分为一个称为方法的数组,并清理每个方法中的参数,然后尝试对其进行修改。
Object res = this;
String[] methods = targetString.split("\\.(?=\\D)");
for (String m : methods){
List<Object> params = new ArrayList<Object>();
List<Object> params = new ArrayList<Object>();
for (String p : m.split("\\(|,|\\)")) {
try {
if (p.indexOf(".") != -1){
double tempD = Double.parseDouble(p);
params.add(tempD);
} else {
int tempP = Integer.parseInt(p);
params.add(tempP);
}
} catch (Exception ex) { //not a number
params.add(p);
}
}
switch (params.size()) {
case 1:
res = res.getClass().getMethod(
params.get(0)
).invoke(res);
break;
case 2:
res = res.getClass().getMethod(
params.get(0),
params.get(1).getClass()
).invoke(res, params.get(1));
break;
case 3:
res = res.getClass().getMethod(
params.get(0),
params.get(1).getClass(),
params.get(2).getClass()
).invoke(res, params.get(1), params.get(2));
break;
}
最后我注意到 res 已经按照我期望的方式进行了修改。所有的 getter 和 setter 都被正确调用。但是当然,“this”所指的底层对象并没有改变!
我想我只是在调用我在第一行制作的副本的 getter 和 setter!
现在我不能只使用
this.getClass().getMethod(...).invoke(...)
因为我需要在此调用返回的对象上调用相同的 getMethod。
澄清:
Object res = this;
为此创建一个“指针”。所以当我打电话
res.getStuff().setStuff(foo)
这也将被修改。
但似乎当我打电话时
res = res.getStuff();
res = res.setStuff();
就像我在循环中所做的那样,这不会修改它所指的基础对象吗?
编辑:根据要求包含更多代码。
Edit2:添加了另一个示例,以澄清我的问题。
Edit3:尝试添加更多代码,如果不包括每个类,添加一个工作程序有点困难