有两个类
- 一个是UserService类,负责对用户进行操作;
- 一个是MethodDemo类,用来测试。
UserService.java
package com.imooc.reflect;
public class UserService {
public void delete(){
System.out.println("删除用户");
}
public void update(){
System.out.println("修改用户");
}
public void find(){
System.out.println("查找用户");
}
}
MethodDemo.java
package com.imooc.reflect;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.lang.reflect.Method;
public class MethodDemo {
public static void main(String[] args) {
UserService us = new UserService();
/*
* 通过键盘输入命令执行操作
* 输入update命令就调用update方法
* 输入delete命令就调用delete方法
* ...
*/
try {
BufferedReader br = new BufferedReader(
new InputStreamReader(System.in));
System.out.println("请输入命令:");
String action = br.readLine();
// if("update".equals(action)){
// us.update();
// }
// if("delete".equals(action)){
// us.delete();
// }
// if("find".equals(action)){
// us.find();
// }
/*
* action就是方法名称, 都没有参数--->通过方法的反射操作就会简单很多
* 通过方法对象然后进行反射操作
*/
Class c = us.getClass();
Method m = c.getMethod(action);
m.invoke(us);
} catch (Exception e) {
e.printStackTrace();
}
}
}
假如需要对用户进行操作,我们从控制台输入指令action(update,delete,find),处理的方法可以是通过if语句来判断输入的指令,从而执行相应的方法
if("update".equals(action)){
us.update();
}
if("delete".equals(action)){
us.delete();
}
if("find".equals(action)){
us.find();
}
这种方式虽然可行但是太繁琐。
在这里,因为action就是方法的名称,而且三个方法都没有参数,所以可以通过方法反射来简化代码,如果输的指令有误则抛出NoSuchMethodException异常,因为我们是根据输入的指令来作为方法名的。
Class c = us.getClass();
Method m = c.getMethod(action);
m.invoke(us);