从 Java 匿名类访问“this”

Posted

技术标签:

【中文标题】从 Java 匿名类访问“this”【英文标题】:Access "this" from Java anonymous class 【发布时间】:2010-11-08 05:16:19 【问题描述】:

给定以下代码:

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()

这是一种合理的方式吗?或者有没有更好的方法?

【问题讨论】:

【参考方案1】:
Container.this.select();

【讨论】:

我什至不知道 this 关键字可以像方法和属性一样被区分。 +1 需要注意的是,这里必须精确指定Container 类。它的任何祖先都不会被接受。 拯救我的……夜晚,也许吧? +1【参考方案2】:

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

【讨论】:

以上是关于从 Java 匿名类访问“this”的主要内容,如果未能解决你的问题,请参考以下文章

java-07 内部类匿名内部类局部内部类lambda

为什么Java匿名内部类访问的外部局部变量或参数需要被final修饰

防止匿名类在 Java 中引用外部成员

Java笔记(面向对象,类,this关键字,封装(private),匿名对象,成员变量和局部变量)

Java笔记(面向对象,类,this关键字,封装(private),匿名对象,成员变量和局部变量)

java匿名内部类访问局部变量垃圾回收