简介

理解不透彻
简而言之,就是在程序运行过程中创建的类
一个代理类只有一个实例域--调用处理器。invoke?
总而言之 reflect 的理解都不是特别透彻

code

package cn;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
import java.util.Arrays;
import java.util.Random;

public class ProxyTest {
	public static void main(String[] args){
		Object[] elements = new Object[1000];
		
		for (int i=0; i<elements.length;i++){
			Integer value = i + 1;
			InvocationHandler handler = new TraceHandler(value);
			Object proxy = Proxy.newProxyInstance(null, new Class[] {Comparable.class}, handler);
			elements[i] = proxy;
		}
		Integer key = new Random().nextInt(elements.length) + 1;
		int result= Arrays.binarySearch(elements, key);
		if(result >=0 ){
			System.out.println(elements[result]);
		}
	}
}

class TraceHandler implements InvocationHandler{
	private Object target;
	
	public TraceHandler(Object t){
		target = t;
	}
	
	public Object invoke(Object proxy, Method m, Object[] args) throws Throwable{
		System.out.print(target);
		System.out.print("." + m.getName() + "(");
		if(args !=null){
			for (int i=0; i<args.length; i++){
				System.out.print(args[i]);
				if(i<args.length - 1)System.out.print(", ");
			}
		}
		System.out.println(")");
		
		return m.invoke(target,  args);
	}
}

posted on 2020-08-17 14:19  HDU李少帅  阅读(156)  评论(0编辑  收藏  举报