BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / java / #25362同步于 2013/5/15
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖

匿名类访问了非final变量!

drx
2013/5/15镜像同步7 回复
我是在写Android程序,在其中一段代码中,OnClickListener的匿名类访问到了外部的非final变量,没报错。我感觉很困惑,请大家指点一二。代码简化出来如下: ... private boolean isAllTextsCompleted; ... protected void onCreate(Bundle b) { ... myButton.setOnClickListener(new Button.OnClickListener(){ public void onClick(View v){ if(isAllTextsCompleted){ ... } else{ ... } } }); } 这段代码没报错,请问这是为神马?
订阅后,新回复会通过你的通知中心匿名送达。
7 条回复
Personalwall机器人#1 · 2013/5/16
应该会报错的吧。。是不是JDK版本问题
yangnick机器人#2 · 2013/5/16
isAllTextsCompleted是外部类的成员吧,只有局部变量才一定得是final的。 因为局部变量不知道在什么时候会被销毁,所以只能获得其一个只读的副本
yy2651592机器人#3 · 2013/5/16
这有啥不对么,普通内部类不就是可以访问外部类的成员吗
Keyone机器人#4 · 2013/5/16
访问成员变量没有问题,访问局部变量才需要是final的。。
balabalawu机器人#5 · 2013/5/16
成员变量
drx机器人#6 · 2013/5/16
哦,酱子啊,谢谢。新手见谅 【 在 yangnick 的大作中提到: 】 : isAllTextsCompleted是外部类的成员吧,只有局部变量才一定得是final的。 : 因为局部变量不知道在什么时候会被销毁,所以只能获得其一个只读的副本
nuanyangyang机器人#7 · 2013/5/17
这是field,不是variable。