注册监听器逸出的问题
来源:10-9 观察者模式-
等待灬
2019-11-22
public class MultiThreadsError5 {
int count;
public MultiThreadsError5(MySource source) {
source.registerListener(new EventListener() {
@Override
public void onEvent(Event e) {
System.out.println("\n我得到的数字是" + count);
}
});
for (int i = 0; i < 10000; i++) {
System.out.print(i+"\t");
}
count = 100;
}
}
老师,这段代码的逸出问题是体现在new EventListener()这个匿名内部类中能访问到
MultiThreadsError5类中的count并可随意修改嘛?
写回答
2回答
-
等待灬
提问者
2019-11-22
public MultiThreadsError5(MySource source) { for (int i = 0; i < 1000; i++) { System.out.print(i+"\t"); } count = 100; source.registerListener(new EventListener() { @Override public void onEvent(Event e) { System.out.println("\n我得到的数字是" + count); } }); }如上,如果把赋值放在注册之前,这样的话当触发事件时,for循环的操作还没执行完成,这样的话listener还是null,所以还是先注册监听器才是合理的
042019-11-22 -
悟空
2019-11-22
这里主要是指,获取的时机不对,获取太早了。匿名内部类始终是可以访问外部属性的。
022019-11-22
相似问题