JAVA:来自对象对象的getMethod

  • 本文关键字:对象 getMethod JAVA java
  • 更新时间 :
  • 英文 :


我有 2 个带有 "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++
}

但这不起作用,调用此错误:

addAttachment file to request java.lang.NoSuchMethodException: 
com.domain.MainObject.getObjOne().getStrAttribOne()

我的代码有什么问题?

getMethod 通过其名称获取方法,例如 getObjOne .此处需要两种getMethod用途,一种用于获取 getObjOne 方法,另一种用于获取 getStrAttribOne 方法。

更简单的解决方案是不要将这些 getter 表示为字符串。您可以有一个函数对象列表而不是字符串,然后调用其 apply 方法。这不需要复杂的反射使用:

List<Function<MainObject, Object>> getters = Arrays.asList(
    o -> o.getObjOne().getStrAttribOne(),
    o -> o.getObjTwo().getStrAttribTwo(),
    o -> o.getObjOne().getIntAttribOne(),
    o -> o.getObjTwo().getIntAttribTwo()
);
for (int i = 0; i < mainObjects.size(); i++) {
    MainObject obj = mainObjects.get(i);
    System.out.println(getters.get(i).apply(obj));
}

如果我没记错的话,getMethod()接受一个方法的名称。不能在字符串中使用 . 运算符。您需要单独存储方法的名称,一旦获得就会调用它们。

最新更新