java - 两个双重嵌套的匿名内部类。如何获得一级匿名类(class)成员?

标签 java inner-classes anonymous-class

内部类是Adapter,inner-inner类是Listener。如何从 Listener 访问(模糊的)适配器成员/方法?

list.setAdapter(new Adapter() {
  public View getView() {
    // ...
    button.setListener(new Listener() {
      public void onClick() {
        Adapter.this.remove(item);
      }
    );
  }
});

通常要访问外部类成员,您只需说 Outer.this.member,但在这种情况下它给了我以下错误(使用实际类):

error: not an enclosing class: ArrayAdapter

那么你应该如何从内部内部类访问内部类成员呢?我不喜欢多层嵌套的匿名类,但在这种情况下,我正在学习一个新的 API,但不确定是否有更简洁的方法。我已经有一个解决方法,但无论如何都想知道。 remove() 并没有真正被 inner-inner 类遮盖,因此在这种情况下实际上不需要指定类,但希望在代码中明确说明此 remove() 方法的确切位置。我也想知道它是否被遮盖了。我相信使用 Outer.$6.remove() 会起作用,但我也不认为它应该是那样的。

最佳答案

this 赋给一个变量,然后访问最里面的那个类。

list.setAdapter(new Adapter() {
  public View getView() {
    final Adapter that = this;
    button.setListener(new Listener() {
      public void onClick() {
        that.remove(item);
      }
    );
  }
});

我不确定这里的命名是什么好。也许是适配器

关于java - 两个双重嵌套的匿名内部类。如何获得一级匿名类(class)成员?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9959837/

相关文章:

java - ActionPerfomed 方法在内部类中不起作用

java - 为什么不在 java 的匿名类中构造函数?它与 OOPs 规则相矛盾

具有水平滚动功能的 JavaFX 8 Tableview

java - 在java中的外部类之外创建内部类的实例

java - 在 json 输出中获取对象时遇到问题

java - 从 javax.swing.text 对 AbstractDocument.UndoRedoDocumentEvent 尝试 instanceof 时出现 IllegalAccessError

java - 抽象类和匿名类

java - 使用java反射调用匿名类的方法时访问异常

java - 无法通过android模拟器发送电子邮件

java - 合集同步更新