Java 在封闭范围内访问变量,特别是BlahlListeners

Java 在封闭范围内访问变量,特别是BlahlListeners,java,eclipse,listeners,Java,Eclipse,Listeners,我正在使用awt包,因为我觉得它是我所需要的,所以我正在制作一个框架,然后制作进入该框架的组件和容器。为了做到这一点,我制作了一些类,这些类扩展了组件或(目前还不完全存在)容器或其他我需要的东西。我的问题是我需要使用MouseListener和ComponentListener,但我“无法访问封闭范围内的非最终变量”。现在,A:看起来它需要是静态的,而不是最终的,但我相信它。B:我怎么能这样做!基本上,我需要能够访问“this”,但“this”是新的侦听器,而不是类。有人知道如何解决这个问题和/

我正在使用awt包,因为我觉得它是我所需要的,所以我正在制作一个框架,然后制作进入该框架的组件和容器。为了做到这一点,我制作了一些类,这些类扩展了组件或(目前还不完全存在)容器或其他我需要的东西。我的问题是我需要使用MouseListener和ComponentListener,但我“无法访问封闭范围内的非最终变量”。现在,A:看起来它需要是静态的,而不是最终的,但我相信它。B:我怎么能这样做!基本上,我需要能够访问“this”,但“this”是新的侦听器,而不是类。有人知道如何解决这个问题和/或其他方法吗?谢谢

也许是这样

ContainingClass.this.someMethod(); // Inside your Listener for example

ContainingClass和someMethod只是伪值;)如果我没有正确地理解你,你需要离开听者的范围。

编辑:我误解了这个问题,所以我之前的回答与此无关

您正在询问如何从匿名内部类别访问非最终局部变量。目前,这不是Java所允许的。事实上,实施它会有点困难

如果一个变量是final,我们可以只取它的值。希望如此,如果它不是最终的,我们需要提供一段内存,可能由多个匿名实例共享,所有这些实例都可以修改。这是一个相当大的问题:内存将分配到哪里?在多线程环境中如何保护它


通常的方法是使用成员变量在匿名内部类(不一定是静态成员)之间共享可写信息。

如果显示最小(但完整)的这段代码演示了这个问题……调用方法或访问成员变量不需要这种语法——这可以直接完成(只需调用
someMethod()
)当您使用gwt/gxt或其他类似的框架时,这并不罕见。是的,但是,它与Healthbar一起工作。this.blah()。天气绝对好