奇怪的问题......
如何在没有实际拥有目标对象的情况下使用动态代理时,如何使用Java的调用拦截器?
例如,我想创建一个超级对象,它可以代表在运行时指定的十几个接口,而不需要一个实现其中任何接口的对象。
基本上这就像大多数动态语言的__call功能一样。
思想?
答案 0 :(得分:7)
也许我误解了这个问题(如果有的话请告诉我!)但是这会让你开始吗?
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
import java.util.Arrays;
public class Main
{
public static void main(final String[] argv)
{
final Object object;
final InvocationHandler handler;
final Runnable runnable;
final Comparable<Object> comparable;
handler = new InvocationHandler()
{
public Object invoke(final Object proxy,
final Method method,
final Object[] args)
throws Throwable
{
System.out.println(proxy.getClass());
System.out.println(method);
System.out.println(Arrays.toString(args));
return (0);
}
};
object = Proxy.newProxyInstance(Main.class.getClassLoader(),
new Class[] {
Runnable.class,
Comparable.class,
},
handler);
runnable = (Runnable)object;
runnable.run();
comparable = (Comparable<Object>)object;
comparable.compareTo("Hello");
}
}