楼主想用这种方法做什么呢?
解决方案 »
- 求java解析http编码
- snmp协议中pdu转发后源ip地址丢失问题,青高手赐教!!!
- 没事做,发个贴,回答一个深奥的问题——共线和共面
- 问个关于delete-orphan的奇怪问题
- JSP页面中如何用嵌入的java代码取到spring配置文件定义的bean?
- myeclipse3.84是否支持hibernate3.0,我看他那里是2.1啊,怎么配置支持3.0呀
- 网上赚钱的好方法
- javax.naming.NameNotFoundException??
- git中, 单个文件夹中的内容无法添加, 求助.
- 怎么算出今天20141117 一个星期前是20141110 二个星期前是20141103 三个星期前是20141027
- mina 高并发处理
- springMVC 跳转不到jsp,求解
能运行时给一个类添加一个接口并实现这个接口的方法吗??
//这是原始的接口
public interface Display {
public void show();
}public interface DisplaySlow {
public void showSlow();
}
使用JDK提供的代理方法,先要写一个Handler类。
public class DisplayHandler implements InvocationHandler { private static final String SHOW_FUNCTION_NAME = "show"; public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
String methodName = method.getName();
if (SHOW_FUNCTION_NAME.equals(methodName)) {
show();
} else {
showSlow();
}
return null;
} //Display接口中方法的实现
private void show() {
System.out.println("call show.");
}
//DisplaySlow接口中的方法实现
private void showSlow() {
System.out.println("call showSlow.");
}
}
下面就是怎么创建这个代理实例了。
public static void main(String[] args) throws Exception {
Object o = Proxy.newProxyInstance(
Thread.currentThread().getContextClassLoader(),
new Class[]{ Display.class,DisplayShow.class}, new DisplayHandler());
((Display) o).show();
((DisplaySlow) o).showSlow();
}
如果为已经存在的实例创建一个代理,并增加新的接口。其实也就是基于上面例子先抽取出原先对象的所有接口,然后在自己实现的Handler类中把新接口的方法调用转到正确的地方去。