JAVA:getMethod从一个对象到一个对象
我有两个具有“n”属性的对象,所有这些对象都在另一个对象上声明 对象:JAVA:getMethod从一个对象到一个对象,java,Java,我有两个具有“n”属性的对象,所有这些对象都在另一个对象上声明 对象: @Data public class ObjectOne{ private String strAttribOne; private Integer intAttribOne; } @Data public class ObjectTwo{ private String strAttribTwo; private Integer intAttribTwo; } 主对象: @Data public cl
@Data
public class ObjectOne{
private String strAttribOne;
private Integer intAttribOne;
}
@Data
public class ObjectTwo{
private String strAttribTwo;
private Integer intAttribTwo;
}
主对象:
@Data
public class MainObject{
private ObjectOne objOne;
private ObjectTwo objTwo;
}
在另一个类中,我有一个包含所有方法的数组:
String[] getters = {
"getObjOne().getStrAttribOne",
"getObjTwo().getStrAttribTwo",
"getObjOne().getIntAttribOne",
"getObjTwo().getIntAttribTwo",
}
现在,我尝试用getMethod调用所有方法
List<MainObject> mainObjects = returnData;
int x=0;
for (int i = 0; i < mainObjects.size(); i++) {
Method choosenMethod = MainObject.class.getMethod(getters[x]);
System.out.println(choosenMethod.invoke(mainObjects.get(i)));
x++
}
我的代码有什么问题 如果我没有错的话,
getMethod()
接受一个方法的名称。不能在字符串中使用
运算符。您将需要单独存储方法的名称,一旦获得,就可以调用它们 通过名称获取方法,例如getObjOne
。这里需要使用两种getMethod
,一种是获取getObjOne
方法,另一种是获取getStrAttribOne
方法
更简单的解决方案是不将这些getter表示为字符串。您可以使用对象列表而不是字符串,然后调用它们的方法。这不需要复杂地使用反射:
List getters=Arrays.asList(
o->o.getObjOne().getStrAttribOne(),
o->o.getObjTwo().getStrAttribTwo(),
o->o.getObjOne().getIntAttribOne(),
o->o.getObjTwo().getIntAttributeTwo()
);
对于(int i=0;i
为什么要这样做?函数返回此错误:“无法创建函数的泛型数组”我已将其更改为列表,以避免创建泛型数组的复杂性,但如果需要将其设置为数组,则可以编写(函数[])新函数[]{…}
,它将编译(带有未选中的强制转换警告)。
addAttachment file to request java.lang.NoSuchMethodException:
com.domain.MainObject.getObjOne().getStrAttribOne()