我在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();
}
}
}
答案 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>