简介
理解不透彻
简而言之,就是在程序运行过程中创建的类
一个代理类只有一个实例域--调用处理器。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);
}
}