Android / Java:使用reflection调用方法?

我有一个名为chooseDialog(String s,int i)的静态方法,我想根据提供给chooseDialog的参数在同一个类(Dialogs.class)中调用另一个方法。 s是所需的方法的名称,我是它的单个参数。

我已经尝试了大量的教程,花了几个小时阅读这个主题,但我似乎无法确切地知道我需要做什么。

有任何想法吗?

谢谢!

Solutions Collecting From Web of "Android / Java:使用reflection调用方法?"

你为什么要调用一个名字在String参数中传递的方法? 你不能为不同的动作创build一个常量,然后使用switch并在每种情况下调用参数i的方法?

编译器会检查代码是否有错误。

编辑 :如果你真的想使用reflection,检索一个Method对象:

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

我猜Integer.class可能工作。 然后调用metod

 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); 

但是如果你想能够使用一个静态方法来调用一个非静态的方法,那么你将需要传入你想要引用的对象或使chooseDialog非静态。

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

但我不认为这是处理这个问题的正确的OOP方法。 并根据您的意见,反思并不是绝对必要的,并selectDialog分析string,并通过适当的方法是一个更types安全的方法。 在任何一种方法中,你的unit testing应该看起来都一样。

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