【问题标题】:acessing variables inside an enclosing scope, specifically BlahListeners访问封闭范围内的变量,特别是 Blah Listeners
【发布时间】:2014-12-09 13:43:56
【问题描述】:

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

【问题讨论】:

  • 如果您能展示一段最少(但完整)的代码来演示问题,那会更容易帮助您...

标签: java eclipse listeners


【解决方案1】:

可能是这样的?

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

ContainingClass 和 someMethod 只是虚假值;)如果我理解正确,您需要离开 Listener 范围。

【讨论】:

  • 您不需要这种语法来调用方法或访问成员变量 - 可以直接完成(只需调用 someMethod()
【解决方案2】:

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

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

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

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

【讨论】:

  • 当您使用 gwt/gxt 或其他类似的框架时,这种情况并不少见。
  • 是的,但是,它与 Healthbar.this.blah() 一起使用。绝对没问题
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-02-11
  • 1970-01-01
  • 2012-04-28
  • 2016-11-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多