我可以用Java中的字段值调用方法吗?

Rob*_*use 1 java methods field call

在Java中是否可以基于字段值调用方法?例如,我问用户他们想要什么苏打水.他们输入他们的选择,并且用于保存其选择的字段的值用于调用该方法.

显然下面的代码不起作用.但我希望它能说明我的意图.这种事情在Java中甚至可能吗?

目标是在不使用IF或SWITCH语句的情况下有效切换.

import java.util.Scanner;

public class FieldResolutionTest
{
     public static void main (String[] args)
     {
         Scanner inputScanner = new Scanner(System.in);
         MethodTester test = new MethodTester();

         System.out.println("Please enter ONE or TWO");
         String selection = inputScanner.nextLine();

         test.(selection)();
     }
}

public class MethodTester
{
     public void ONE()
     {
         System.out.println("You ran method ONE");
     }

     public void TWO()
     {
         System.out.println("You ran method TWO");
     }
}
Run Code Online (Sandbox Code Playgroud)

mel*_*okb 7

与反思技术上是可行的,但如果你有一个已知的可能方法,数量有限,这将是更易于使用switch语句(或if/ else如果你没有安装Java 7):

switch (selection) {
    case "ONE":
        test.ONE();
        break;
    case "TWO":
        test.TWO();
        break;
    // etc.
    default:
        System.out.println("Invalid method!");
        break;
}
Run Code Online (Sandbox Code Playgroud)

如果这些方法是动态的,或者你正在测试很多类,并且你仍然希望使用反射路径,那么它看起来像这样:

try {
    Method m = MethodTester.class.getMethod(selection);
    m.invoke(test);
} catch (NoSuchMethodException nsme) {
    System.out.println("Invalid method!");
}
Run Code Online (Sandbox Code Playgroud)