ProxyTest.java
import java.lang.reflect.Proxy;
import java.util.Arrays;
import java.util.Random;
public class ProxyTest {
public static void main(String[] args) {
Object[] objects = new Object[1000];
Integer[] integers = new Integer[1000];
for(int i = 0;i < objects.length;i++){
Integer value = i+1;
integers[i] = value;
IntegerHandler handler = new IntegerHandler(value);
Object proxyInstance = Proxy.newProxyInstance(ClassLoader.getSystemClassLoader(), new Class[]{Comparable.class}, handler);
objects[i] = proxyInstance;
}
Integer key = new Random().nextInt(objects.length)+1;
int result = Arrays.binarySearch(objects,key);
System.out.println(result);
}
}
IntegerHandler.java
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
public class IntegerHandler implements InvocationHandler {
private Integer target;
public IntegerHandler(Integer target) {
this.target = target;
}
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
System.out.print(target);
System.out.print("."+method.getName()+"(");
for(Object arg1 : args){
System.out.print(arg1+",");
}
System.out.println(")");
return method.invoke(target,args);
}
}