Вызов нумерованного имени функции в цикле с использованием java отражения
У меня проблема как: 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
}
TestClass.java
public void doProcessing(MyFirstClass pObj){
for(int i=0;i<3;i++){
System.out.println() ;
//###question is here
}
Я хочу использовать Java-отражение и вызывать методы pObj.getP**Param() для цикла for, предоставляя параметры g
Method m= cls.getMethod("getP"+(i+1)+"Param");
pObj.getSecClass.[ invokeMethod m ]
Как это можно сделать возможным. Я не хочу использовать массив p*Params.
Заранее спасибо.
3 ответа
Вы уверены, что это то, что вам нужно? Для меня ваш код кажется типичным примером текущей тенденции злоупотребления рефлексией для каждой задачи. Почему бы вам не использовать массивы или карты для хранения свойств p[0-9]+Param
,
Массивы были изобретены именно для этого. Они предоставляют диапазон переменных, проиндексированных числами.
Ты почти там. Когда у вас есть Method
объект, просто назовите это так:
String param = (String) m.invoke(pObj.getSecClass());
Обратите внимание, что такие игры с отражением могут привести к сложному и сложному коду, который сложно поддерживать. Если бы вы сказали нам, что представляют собой пронумерованные параметры, мы могли бы предложить лучшее решение (возможно, один параметр, который является List<String>
?).