如何从 Java 中的给定字符串调用方法

How to call a method from a given string in Java

我正在尝试减少我的代码使用一堆 if 语句来获取指定的命令并为其调用方法。

相反,我想尝试一些可以接受该命令并使用它调用方法名称的东西

像这样:

"get" + commandString + "Count"()

而不是:

if (command == "something") {
   callSomeMethod();
}

if (command == "somethingelse") {
   callSomeOtherMethod();
}

...

有没有办法从指定的字符串中调用方法?或者更好的方法来解决这个问题。

这是 switch case 语句的 use-case。

switch(command){
    case "command1": command1(); break;
    case "command2": command2(); break;

幸运的是,在 Java 中不可能使用字符串 javascript 样式。评论链接到如何使用反射来完成类似的事情的答案。这很少是一个好的解决方案。

我们可以使用

java.lang.reflect.Method Something like

java.lang.reflect.Method method;
try {
    method = obj.getClass().getMethod(methodName, param1.class, param2.class, ..);
} catch (SecurityException e) { ... }
catch (NoSuchMethodException e) { ... }

参数标识您需要的非常具体的方法(如果有多个重载可用,如果方法没有参数,则只提供方法名称)。

您可能的解决方案可能是 -

package com.test.pkg;
public class MethodClass {
  public int getFishCount() {
    return 5;
 }
 public int getRiceCount() {
    return 100;
 }
 public int getVegetableCount() {
    return 50;
 }
}
package com.test.pkg;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
public class Test {
    public static void main(String[] args) {
        MethodClass classObj = new MethodClass();
        Method method;
        String commandString = "Fish";
        try {
            String methodName = "get" + commandString + "Count";
            method = classObj.getClass().getMethod(methodName);
            System.out.println(method.invoke(classObj));          //equivalent to System.out.println(testObj.getFishCount());
        } catch (SecurityException | NoSuchMethodException | IllegalAccessException | InvocationTargetException e) {
            e.printStackTrace();
        }
    }
}

参考:How do I invoke a Java method when given the method name as a string?