Вызов нумерованного имени функции в цикле с использованием 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>?).

Как это:

Object result = m.invoke(pObj.getSecClass)
Другие вопросы по тегам