Java 用反射法代替开关

Java 用反射法代替开关,java,reflection,switch-statement,Java,Reflection,Switch Statement,我正在用java测试反射方法。我想使用反射方法而不是switch方法来调用方法。假设我有以下类别: public class Sample { public void add(int a, int b) { System.out.println("a + b = " + (a + b)); } public void subtract(int a, int b) { System.out.println("a - b = " + (a - b)); } public void

我正在用java测试反射方法。我想使用反射方法而不是switch方法来调用方法。假设我有以下类别:

public class Sample {
public void add(int a, int b) {
    System.out.println("a + b = " + (a + b));
}

public void subtract(int a, int b) {
    System.out.println("a - b = " + (a - b));
}

public void multiply(int a, int b) {
    System.out.println("a * b = " + (a * b));
}

public void divide(int a, int b) {
    System.out.println("a / b = " + (a / b));
}
然后,在main方法中,用户输入一个方法名来调用一个方法。但是,我不知道在调用方法之后如何在main方法中设置a和b参数。主要方法的代码如下所示:

public class Test {
public static void main(String[] args) {
    try {
        Scanner scr = new Scanner(System.in);
        String str = scr.next();
        Object obj = Class.forName("packageName.Sample").newInstance();
        Method method = obj.getClass().getDeclaredMethod(str);
        method.invoke(obj);
    } catch (Exception e) {
        e.printStackTrace();
    }
}

}

我已经展示了通过反射使用参数化方法的机制。 这将适用于所有方法,因为它们都将int,int作为参数。如果使用各种参数类型,则必须相应地修改getDeclaredMethod的str、int.class、int.class参数

public static void main(String[] args) {
try {
    Scanner scr = new Scanner(System.in);
    String str = scr.next();
    int a = scr.nextInt();
    int b = scr.nextInt();
    Object obj = Class.forName("PackageName.Sample").newInstance();
    Method method = obj.getClass().getDeclaredMethod(str,int.class,int.class);
    method.invoke(obj,a,b);
} catch (Exception e) {
    e.printStackTrace();
}
}
}
在本例中,请注意,我修改了“从扫描仪读入”以接受方法名、用户通过System.In输入的第一个int和第二个int参数,并按enter键分隔