永发信息网

写了一个ArrayList的动态代理proxy 可是这个代理无法调用ArrayList的所有方法这是为什么呢

答案:2  悬赏:60  手机版
解决时间 2021-02-18 08:12
写了一个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;
}

}
最佳答案
只要变换不同的接口来获取代理就可以实现不同的功能
Collection proxy = (Collection) getProxy(target);
List proxy = (List) getProxy(target);
Cloneable proxy = (Cloneable) getProxy(target);
然后就可以调用不同接口的方法了
全部回答
虽然我很聪明,但这么说真的难到我了
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
为什么我的惠普8470P重装系统后无法关闭小键
火舞舞蹈工作室这个地址在什么地方,我要处理
父亲有债务纠纷,子女头上有房产会不会被牵连
斗鱼炉石区狗贼的电风扇树是怎么种出来的
概念数据层所涉及的是数据库所有对象的物理情
宏诚澳式静音卷闸门厂在什么地方啊,我要过去
耐高温的齿轮油有吗?
肾炎红细胞高吃什么
【蔷薇少女翠星石】《蔷薇少女》中翠星石的瞳
为什么在CDR里放大位图不会出现马赛克?
伊卡这个地址在什么地方,我要处理点事
公务员如何赚钱
什么叫札子?札子的演变过程如何?
南宁市哪里有回收古币银元的。本人有些想出售
VERO MODA在哪里啊,我有事要去这个地方
推荐资讯
比起其他卵生动物,鸟类的后代成活率为什么高?
爱尚美形象设计怎么去啊,有知道地址的么
我有一枚直径超过8厘米的崇宁通宝花钱,背面
什么叫做非酋
一加四十七等于二十一
不锈钢做电极会被腐蚀吗
辣椒的花蕾总是掉有哪些原因?
杨铭宇黄焖鸡米饭江东路店地址有知道的么?有
淘宝账号怎么解绑手机
形容从未见过却已相爱的两个人古诗词
发烧是什么原因引起的
兄弟餐馆我想知道这个在什么地方
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?