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;
Class[] interfaces=value.getClass().getInterfaces();
InvocationHandler handler = new TraceHandler(value);
Object proxy = Proxy.newProxyInstance(null, interfaces,handler);
elements[i]=proxy;
}
Integer key = new Random().nextInt(elements.length)+1;
System.out.println("start:"+key);
int result = Arrays.binarySearch(elements, key);
if(result>=0)System.out.println(elements[result]);
}
}
class TraceHandler implements InvocationHandler
{
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);
}
private Object target;
}