两个双嵌套匿名内部类。如何获得一级匿名班级成员?

时间:2012-03-31 21:28:42

标签: java inner-classes anonymous-class

内部类是Adapter,内部类是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()并没有真正被内部内部类隐藏,因此在这种情况下指定类并不是必需的,但是想在代码中明确指出这个remove()方法的位置。我也想知道它是否被遮挡。我相信使用Outer.$6.remove()会起作用,但我不相信它应该也是这样。

3 个答案:

答案 0 :(得分:13)

this分配给变量,然后访问最里面的类。

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

我不确定这里有什么好的命名。也许是adapter

答案 1 :(得分:1)

直接在Adapter上调用方法:

list.setAdapter(new Adapter() {
  public View getView() {
    // ...
    button.setListener(new Listener() {
      public void onClick() {
        remove(item); // <-- this will call Adapter's method of the anonymous class
      }
    );
  }
});

答案 2 :(得分:0)

这很简单:尝试使用没有此类指针的outer.remove