写了一个ArrayList的动态代理proxy 可是这个对象只能调用Collection中的方法 ArrayList中的有些方法却不能调用 应该怎么解决呢? 问题已经在代码中标明
package cn.taotao.proxy;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
import java.util.ArrayList;
import java.util.Collection;
public class ProxyTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
final ArrayList target = new ArrayList();
Collection proxy = (Collection) getProxy(target);//proxy是ArrayList的代理
//测试代理
//((ArrayList)proxy).ensureCapacity(20);//这里会报错,为什么?注释掉这一行就可以运行正常
//proxy.ensureCapacity(20);//这样也报错,为什么?要怎么样才能调用ArrayList所有的方法
proxy.add(1);
proxy.add(2);
proxy.add(3);
System.out.println(proxy.size());
System.out.println(proxy.getClass().getName());
}
public static Object getProxy(final Object target) {
Object proxy = Proxy.newProxyInstance(
target.getClass().getClassLoader(),
target.getClass().getInterfaces(),
new InvocationHandler() {
@Override
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
long beginTime = System.currentTimeMillis();//附加功能
Object reValue = method.invoke(target, args);//调用目标的方法
long endTime = System.currentTimeMillis();//附加功能
//计算方法运行的时间
System.out.println(method.getName() + "'s ran time is " + (endTime-beginTime));
return reValue;
}
});
return proxy;
}
}
写了一个ArrayList的动态代理proxy 可是这个代理无法调用ArrayList的所有方法这是为什么呢
答案:2 悬赏:60 手机版
解决时间 2021-02-18 08:12
- 提问者网友:遁入空寂
- 2021-02-17 22:39
最佳答案
- 五星知识达人网友:千杯敬自由
- 2021-02-17 23:07
只要变换不同的接口来获取代理就可以实现不同的功能
Collection proxy = (Collection) getProxy(target);
List proxy = (List) getProxy(target);
Cloneable proxy = (Cloneable) getProxy(target);
然后就可以调用不同接口的方法了
Collection proxy = (Collection) getProxy(target);
List proxy = (List) getProxy(target);
Cloneable proxy = (Cloneable) getProxy(target);
然后就可以调用不同接口的方法了
全部回答
- 1楼网友:由着我着迷
- 2021-02-17 23:43
虽然我很聪明,但这么说真的难到我了
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯