package chapter6; import java.lang.reflect.*; import java.util.*; public class ProxyTest { public static void main(String[] args) { var elements = new Object[1000]; for (int i = 0; i < elements.length; i++) { Integer value = i + 1; var handler = new TraceHandler(value); Object proxy = Proxy.newProxyInstance( ClassLoader.getSystemClassLoader(), 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); // print method name System.out.print("." +m.getName() + "("); // print explicit arguments 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); } }
输出结果如下: