本帖最后由 杨兴庭 于 2013-7-29 11:03 编辑
我用做好的创建代理方法,想要创建一个ArrayList的代理,为什么我传进一个ArrayList对象,得到的只能是List或者Collection对象?如果强转成ArrayList会报错,这是什么原因呢?
下面是代码:- package com.study.day3;
- import java.lang.reflect.Constructor;
- import java.lang.reflect.InvocationHandler;
- import java.lang.reflect.InvocationTargetException;
- import java.lang.reflect.Method;
- import java.lang.reflect.Proxy;
- import java.util.ArrayList;
- import java.util.Collection;
- public class TestTest {
- public static void main(String[] args) throws Exception {
-
- ArrayList target = new ArrayList();
- Advise advise = new MyAdvise();
- Collection proxy4 = (Collection) getProxy(target,advise);//问题在这里,只能用强转成Collection和List,不能专程ArrayList
- System.out.println(proxy4.toString());//注意:从Object继承来的方法,只有toString,hashCode,equals,
- System.out.println(proxy4.getClass());//调用时委托给InvocationHandler,其他的方法Proxy自己都有实现.
- }
-
- private static Object getProxy(final Object target,final Advise advise) {
- Object proxy3 = Proxy.newProxyInstance(
- target.getClass().getClassLoader(),
- target.getClass().getInterfaces(),
- new InvocationHandler(){
- @Override
- public Object invoke(Object proxy, Method method, Object[] args)
- throws Throwable {
-
- advise.before(method);
- Object reValue = method.invoke(target, args);
- advise.after(method);
- return reValue;
- }
- }
- );
- return proxy3;
- }
- }
复制代码 |