2011-05-04 117 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)