方法反射操作示例1

有两个类

  • 一个是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);

猜你喜欢

转载自blog.csdn.net/innocent_jia/article/details/89041541
今日推荐