вызов нумерованного имени функции в цикле с использованием Java-отражения - PullRequest
1 голос
/ 04 мая 2011

у меня проблема как: 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 ]

1 голос
/ 04 мая 2011

Вы уверены, что это то, что вам нужно?Для меня ваш код кажется типичным примером текущей тенденции злоупотребления рефлексией для каждой задачи.Почему бы вам не использовать массивы или карты для хранения свойств p[0-9]+Param.

Массивы были изобретены именно для этого.Они предоставляют диапазон переменных, проиндексированных числами.

1 голос
/ 04 мая 2011

Ты почти у цели. Получив объект Method, просто назовите его так:

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

Обратите внимание, что такие игры с отражением могут привести к сложному и сложному коду, который сложно поддерживать. Если бы вы сказали нам, что представляют собой пронумерованные параметры, мы могли бы предложить лучшее решение (возможно, один параметр, который является List<String>?).

0 голосов
/ 04 мая 2011

Как это:

Object result = m.invoke(pObj.getSecClass)
...