Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JAVA:getMethod从一个对象到一个对象_Java - Fatal编程技术网

JAVA:getMethod从一个对象到一个对象

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

我有两个具有“n”属性的对象,所有这些对象都在另一个对象上声明

对象:

@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()