A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 jinhu358 于 2013-5-9 15:53 编辑

        
方法的参数为什么要使用final 修饰呢?    为什么不用final就报错了?
private static Object getProxy(final Object target,final Advice advice) {
                Object proxy3 = Proxy.newProxyInstance(
                                target.getClass().getClassLoader(),
                                /*new Class[]{Collection.class},*/
                                target.getClass().getInterfaces(),
                                new InvocationHandler(){
                                        public Object invoke(Object proxy, Method method, Object[] args)throws Throwable {
                                                advice.beforeMethod(method);
                                                Object retVal = method.invoke(target, args);
                                                advice.afterMethod(method);
                                                return retVal;                                                
                                                
                                        }
                                }
                                );
                return proxy3;
        }

2013-05-06_003848.png (69.54 KB, 下载次数: 0)

2013-05-06_003848.png

4 个回复

正序浏览
只要记住一句话:内部类访问局部变量,该变量必须是final型的,如果想深究的话,有一个博客
去看下吧:http://rongqiang1992.blog.163.com/blog/static/21727620920133270335138/
里面讲清楚了来龙去脉,不过有点难懂。。。
回复 使用道具 举报
因为在这个方法中,传进来的参数相当于方法的局部变量,而在后面的匿名内部类中用到了,这个参数,想要在内部类中用局部变量,该局部变量必须是final修饰的。
回复 使用道具 举报
因为你这里用到里 匿名内部类,因为局部变量的范围在该方法内,当一个方法结束时,局部变量消失。
但定义在这个类中的内部类对象仍然是存在的,即内部类对象不能使用局部变量了。final定义的局部变量是个常量,它的生命周期超出方法运行的生命周期。
回复 使用道具 举报
还没学到那来,顶帖后默默飘走。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马