使用反射方法代替开关

时间:2014-06-15 08:20:13

标签: 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 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参数。 main方法的代码如下:

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

}

1 个答案:

答案 0 :(得分:0)

我已经展示了通过反射处理参数化方法的机制。 这将适用于所有方法,因为它们都将(int,int)作为参数。如果使用各种param类型,则必须相应地修改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();
}
}
}

(在这个例子中,请注意我已经从Scanner修改了读入以接受方法名称,第一个int和第二个int参数来自用户通过System.in,通过按Enter键分隔。)< / p>