java 代理類
阿新 • • 發佈:2020-08-17
簡介
理解不透徹
簡而言之,就是在程式執行過程中建立的類
一個代理類只有一個例項域--呼叫處理器。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); } }