我正在使用awt包,因为我觉得这是我需要的,我正在制作一个框架,然后制作进入该框架内的组件和容器。要做到这一点,我正在制作扩展Component或(还没有完全)容器的类或其他任何我需要的东西。我的问题是我需要使用MouseListeners和ComponentListeners,但我“无法访问封闭范围内的非最终变量。”现在,答:看起来它需要是静态的,而不是最终的,但我会相信它。 B:我该怎么办呢!基本上,我需要能够访问“this”,但“this”是新的Listener,而不是类。有人知道如何解决这个问题,和/或另一种做事的方法吗?谢谢!
答案 0 :(得分:0)
也许是这样的?
ContainingClass.this.someMethod(); // Inside your Listener for example
ContainingClass和someMethod只是伪造的值;)如果我理解正确的话,你需要离开监听器范围。
答案 1 :(得分:0)
编辑:我误解了这个问题,所以我之前的回答是无关紧要的。
您要求从匿名内部条款访问非最终本地变量。目前,这不是Java允许的。事实上,实施它会有点困难。
如果变量是最终的,我们可以取其值。 Hopwever,如果它不是最终的,我们需要提供一块内存,可能由多个不同实例共享,所有这些内存都可以修改。这是一个很大的问题:内存将在哪里分配?你会如何在多线程的环境中保护它?
通常的方法是使用成员变量在匿名内部类(不一定是静态成员)之间共享可写信息。