2011-05-04 77 views
1

我有一个问题,因为调用循环编号功能名称: MyFirstClass.java使用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 
} 

TestClass.java

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

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

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

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

在此先感谢。

回答

1

你确定这是你需要什么?对我而言,你的代码似乎是当前每个任务滥用反思趋势的典型例子。为什么不使用数组或地图来存储属性p[0-9]+Param

数组是为了做到这一点而发明的。它们提供了一系列变量,以数字为索引。

+0

其还不错。 – gtiwari333 2011-05-04 09:39:10

+0

@gt_ebuddy:然后摆脱反射代码模拟数组。 – jmg 2011-05-05 13:04:20

1

你快到了。一旦你的Method对象,就调用它是这样的:

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

注意,这样的反射游戏可能会导致难以把握,复杂的代码,它可以是很难维持的。如果您告诉我们编号参数代表的是什么,那么我们可以提供更好的解决方案(可能只有一个参数是List<String>?)。

+0

感谢您的回复,是的,显然列表是不错的选择。以上问题 – gtiwari333 2011-05-04 09:14:30

+0

“上述问题”是什么? – 2011-05-04 09:20:06

+0

很明显,列表是不错的选择。我只是想通过使用反射来做同样的事情,并得到了回答并提出了问题。谢谢你的回复... – gtiwari333 2011-05-04 09:27:55

0

像这样:

Object result = m.invoke(pObj.getSecClass)