在SO和谷歌寻找这个问题的答案,但找不到任何答案.
我有以下代码:
MyClass variable = new MyClass();
Button b = new Button();
b.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e){
System.out.println("You clicked the button");
variable.doSomething();
}
});
Run Code Online (Sandbox Code Playgroud)
编译器返回:
从内部类中访问局部变量变量; 需要宣布最终
什么variable必须是最终的技术原因是什么?
这是因为你使用的是匿名内部类.会发生什么是编译器为您创建类.它要求它作为你的外部类,并添加$和数量,例如$,$2等等.
该类引用了自动初始化的外部类,因此它的实例可以使用外部类的方法和字段.
但你的班级是匿名的.这里面那种方法的定义,并且可以使用它这个匿名类之前定义的内部变量.问题是"它怎么能这样做?" 实际上,您不能引用"运行方法的实例"来访问其变量.答案是从匿名内部类引用的所有方法变量都被复制到匿名内部类.因此,变量必须是最终的:否则有人可以从外部类中更改它们的值,并且更改将不会在内部类中可见.
| 归档时间: |
|
| 查看次数: |
2771 次 |
| 最近记录: |