2

我有一个问题:MyFirstClass.java

public class MyFirstClass{
  String strParam;
  MySecondClass secClass;
  //getters and setters
}

MySecondClass.java

public class MySecondClass{
  String p1Param;
  String p2Param;
  String p3Param;
  String p4Param;
//setters and getters
}

测试类.java

public void doProcessing(MyFirstClass pObj){
  for(int i=0;i<3;i++){
  System.out.println() ;
  //###question is here
}

我想使用 java 反射并通过向 g 提供参数来调用 for 循环中的 pObj.getP**Param() 方法

Method m= cls.getMethod("getP"+(i+1)+"Param");
pObj.getSecClass.[ invokeMethod m ]

如何使它成为可能。我不想使用 p*Params 数组。

提前致谢。

4

3 回答 3

2

你确定这是你需要的吗?对我来说,您的代码似乎是当前每项任务都滥用反射趋势的典型示例。为什么不使用数组或映射来存储属性p[0-9]+Param

发明阵列就是为了做到这一点。它们提供了一系列变量,由数字索引。

于 2011-05-04T09:17:10.373 回答
1

您快到了。获得Method对象后,只需像这样调用它:

String param = (String) m.invoke(pObj.getSecClass());

请注意,此类反射游戏可能会导致难以掌握和难以维护的复杂代码。如果您告诉我们编号参数代表什么,那么我们可以提供更好的解决方案(可能是单个参数是一个List<String>?)。

于 2011-05-04T08:58:55.880 回答
0

像这样:

Object result = m.invoke(pObj.getSecClass)
于 2011-05-04T09:00:15.763 回答