Android / Java: вызов метода с использованием отражения?

У меня есть статический метод под названием selectDialog (String s, int i), в котором я хочу вызвать другой метод в пределах одного класса (Dialogs.class) на основе параметров, предоставленных для выбораDialog. S – это имя желаемого метода, а i – это единственный параметр.

Я пробовал множество учебных пособий и провел несколько часов на этом тему, но я не могу понять, что именно мне нужно делать.

Есть идеи?

Благодаря!

Solutions Collecting From Web of "Android / Java: вызов метода с использованием отражения?"

Почему вы хотите вызвать метод с именем, переданным в параметре String? Не можете ли вы создать константы для разных действий, затем использовать switch и в каждом случае вызвать метод с параметром i ?

У вас будет преимущество компилятора, проверяющего ваш код на наличие ошибок.

Edit : если вы действительно хотите использовать отражение, извлеките объект Method с помощью:

 Method m = YourClass.class.getMethod("method_name",new Class[] { Integer.class }) 

Я думаю, Integer.class может работать. Затем вызовите метод как

 m.invoke(null,123); //first argument is the object to invoke on, ignored if static method 
 Method method = Dialogs.getMethod(s, Integer.class); method.invoke(null, i); 

Если вы просто хотите вызвать другой статический метод в классе, вы можете использовать подход, уже идентифицированный другими:

 Method method = Dialogs.getMethod(s, Integer.class); method.invoke(null, i); 

Но если вы хотите использовать статический метод для вызова нестатического метода, вам нужно будет передать объект, который вы хотите ссылаться, или сделать selectDialog нестатическим.

 function chooseDialog(Object o, String s, Integer i) { Method method = Dialogs.getMethod(o, Integer.class); method.invoke(o, i); } 

Но я не думаю, что это правильный способ ООП справиться с этой проблемой. И исходя из ваших комментариев, рефлексия не является абсолютно необходимой, и выберетеDialog проанализировать строку и передать, что соответствующий метод является гораздо более типичным подходом. В любом из подходов ваши модульные тесты должны выглядеть одинаково.

  if (s.equals("dialog1")) { dialog1(i); }