访问封闭范围内的变量,特别是Blah Listeners

时间:2014-12-09 13:43:57

标签: java eclipse listeners

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

2 个答案:

答案 0 :(得分:0)

也许是这样的?

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

ContainingClass和someMethod只是伪造的值;)如果我理解正确的话,你需要离开监听器范围。

答案 1 :(得分:0)

编辑:我误解了这个问题,所以我之前的回答是无关紧要的。

您要求从匿名内部条款访问非最终本地变量。目前,这不是Java允许的。事实上,实施它会有点困难。

如果变量是最终的,我们可以取其值。 Hopwever,如果它不是最终的,我们需要提供一块内存,可能由多个不同实例共享,所有这些内存都可以修改。这是一个很大的问题:内存将在哪里分配?你会如何在多线程的环境中保护它?

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