MethodHandle与VarHandle练习题

MethodHandle与VarHandle练习题

作业要求:在控制台实现,实例方法,类变量,实例变量的使用
实现代码如下

public class Method {
	/**
	 * 名字
	 */
	private static String name = "王留闯";
	/**
	 * 年龄
	 */
	private int age = 18;

	/**
	 * 获取名字的方法
	 * 
	 * @return 名字
	 */
	private static String getName() {
		return "我的名字是:" + name;
	}

	/**
	 * 获取年龄的方法
	 * 
	 * @return 年龄
	 */
	private String getAge() {
		return "我的年龄是:" + age;
	}

	/**
	 * 程序入口
	 * 
	 * @param args 入口参数
	 * @throws Throwable 抛出异常
	 */
	public static void main(String[] args) throws Throwable {
		// 获取扫描器输入流
		Scanner sc = new Scanner(System.in);
		System.out.println("退出程序请输入:exit | 退出 \n清输入变量名或方法名进行查询");
		// 判断是否有下一行输入
		while (sc.hasNextLine()) {
			// 获取下一行输入
			String currentString = sc.nextLine();
			if (currentString.equals("exit") || currentString.equals("退出")) {
				break;
			}
			MethodAddVarHandle(currentString);
		}
		System.out.println("程序退出");
	}

	/**
	 * 打印输入
	 * 
	 * @param obj 传入输入
	 */
	private static void println(Object obj) {
		System.out.println("查询结果:" + obj);
	}

	/**
	 * 该方法用于查找变量以及方法
	 * 
	 * @param methodAddvar 传入名字
	 * @throws Throwable 抛出异常
	 */
	private static void MethodAddVarHandle(String methodAddvar) throws Throwable {
		// 创建一个该类对象,用于匹配非静态成员
		Method method = new Method();
		switch (methodAddvar) {
		case "name":
			// 用于匹配name的变量
			VarHandle varHandle = MethodHandles.lookup().findStaticVarHandle(Method.class, methodAddvar, String.class);
			println(varHandle.get());
			break;
		case "age":
			// 用于匹配age的变量
			VarHandle varHandle2 = MethodHandles.lookup().findVarHandle(Method.class, methodAddvar, int.class);
			println(varHandle2.get(method));
			break;
		case "getName":
			// 用于匹配getName的方法
			MethodHandle methodHandle = MethodHandles.lookup().findStatic(Method.class, methodAddvar,
					MethodType.methodType(String.class));
			println(methodHandle.invoke());
			break;
		case "getAge":
			// 用于于匹配getAge的方法
			MethodHandle methodHandle2 = MethodHandles.lookup().findVirtual(Method.class, methodAddvar,
					MethodType.methodType(String.class));
			println(methodHandle2.invoke(method));
			break;
		default:
			// 未匹配到该类的变量或方法
			System.out.println("为找到该变量名或方法名");
			break;
		}
	}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值