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

Java 两个双嵌套匿名内部类。如何获得一级匿名类成员?,java,inner-classes,anonymous-class,Java,Inner Classes,Anonymous Class,内部类是适配器,内部类是侦听器。如何从侦听器访问(隐藏)适配器成员/方法 list.setAdapter(new Adapter() { public View getView() { // ... button.setListener(new Listener() { public void onClick() { Adapter.this.remove(item); } ); } }); 通常要访问外部类成员,只需说出

内部类是适配器,内部类是侦听器。如何从侦听器访问(隐藏)适配器成员/方法

list.setAdapter(new Adapter() {
  public View getView() {
    // ...
    button.setListener(new Listener() {
      public void onClick() {
        Adapter.this.remove(item);
      }
    );
  }
});
通常要访问外部类成员,只需说出outer.this.member,但在本例中,它给了我以下错误(使用实际类):


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

很简单:在不使用此类指针的情况下尝试outer.remove

直接调用适配器上的方法:

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
      }
    );
  }
});
list.setAdapter(新适配器(){
公共视图getView(){
// ...
setListener(新的Listener(){
公共void onClick(){

删除(项);//将
分配给变量,然后访问最里面的一个类

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

我不确定这里的命名是否合适。也许
adapter

我知道。但如果侦听器有一个remove()方法,该怎么办?好问题!我今晚会研究它。那不行。remove()不是Outer的方法。它是Adapter的方法。我明白了。我以为会有一种语言语法来获取我不知道的Adapter。顺便说一句,
那必须是最终的。我更喜欢这种方法,因为它易于阅读和显式。我在Adapter=Adapter.this一行上得到一个编译错误;(适配器不是封闭类)。相反,您应该说final Adapter that=this..if all。。
list.setAdapter(new Adapter() {
  public View getView() {
    final Adapter that = this;
    button.setListener(new Listener() {
      public void onClick() {
        that.remove(item);
      }
    );
  }
});