从Java匿名类中访问“this”

149

给定以下代码:

public interface Selectable {
  public void select();
}

public class Container implements Selectable {
  public void select() {
  ...
  }
  public void createAnonymousClass() {
    Selectable s = new Selectable() {
      public void select() {
        //see comment below.
      }
    };
  }
}

我想在匿名类的 select() 方法内使用 Container.select()。然而,this.select() 会再次调用匿名类的 select() 方法。

我的建议是:

在 Container 中引入一个字段,例如:

private Container self = this;

现在我可以通过在匿名类内部调用self.select()来访问Container.select()方法。

这是一个合理的方式吗?还有其他更好的方式吗?

2个回答

284
Container.this.select();

3
我不知道甚至this关键字也可以像方法和属性一样进行区分。+1 - logo_writer
需要注意的是,您必须在此处明确指定“Container”类。任何其祖先类都将不被接受。 - velis
也许我能在今晚救你一回?+1 - Gianmarco
如果我们尝试使用相同命名的匿名类和保密类会怎样呢?(假设不实现接口。) - wolfenblut

43

你可以写 Container.this.select() 来区分内部类!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接