可以用for做getMethodX吗?

我有四个方法如此创建:

method1(); method2(); method3(); method4(); 

我能这样用吗?

 for (int i = 1; i <= 4; i++) { method+i+(); // ? } 

有很多方法可以做到这一点,但一般来说它表明你没有正确编程你的程序。 你可以这样做。

 for (int i = 1; i <= n; i++) getClass().getMethod("method" + i).invoke(); 

或者你可以有一个很长的方法,它结合了你需要的所有function。

Java 8中的另一种方法是执行此操作

 Runnable[] runs = { this::methodOne, this::methodTwo, this::methodThree, this::methodFour, this::methodFive, this::methodSix }; for (int i = 0; i < n; i++) runs[i].run(); 

您可以使用Reflection来执行此操作,但这有点糟糕。

 Class clazz = this.getClass(); for (int i=0; i < 4; i++) { Method method = clazz.getMethod("method" + i); method.invoke(this); } 

准备好处理大量的例外情况

如果您使用的是Java 8,则可以将方法引用放入Map ,然后按名称访问它们。

假设你的方法属于这样的类:

 public class Test { public void method1() { System.out.println("Method 1!"); } public void method2() { System.out.println("Method 2!"); } public void method3() { System.out.println("Method 3!"); } public void method4() { System.out.println("Method 4!"); } } 

关键是方法名称。

 Map methodMap = new HashMap(); Test test = new Test(); methodMap.put("method1", test::method1); methodMap.put("method2", test::method2); methodMap.put("method3", test::method3); methodMap.put("method4", test::method4); for (int i = 1; i <= 4; i++) { String methodName = "method" + i; Runnable method = methodMap.get(methodName); method.run(); } 

输出:

 Method 1! Method 2! Method 3! Method 4! 

如果您的方法采用某些参数和/或返回值,那么您将需要选择不同于Runnable的不同function接口。

  • 供应商或[Boolean | Int | Double | Long]供应商在不参数的情况下返回值。
  • Consumer或[Boolean | Int | Double | Long]使用者在不返回值的情况下获取参数。
  • 各种类似Function的接口,用于获取参数和返回函数。

如果做不到这一点,您可以随时定义自己的function界面,该界面代表适合您方法的参数和可能的返回值。

你可以使用reflection。 反思很棘手并且效果不好,所以你应该考虑一下你是否真的想要继续这样做。

但是,代码看起来像

 for (int i = 1 ; i <= 4; i++) { Method method = this.getClass().getDeclaredMethod("method"+i); method.invoke(this); } 

假设方法不是静态的并且在当前类中定义。