ClassName.this的目的是什么,除了消歧之外?

时间:2013-03-29 18:34:22

标签: java android this

我已经在SO和其他地方的许多Android代码中使用ClassName.this在线(而不是简单的this关键字)来引用类的当前实例。我知道你可能会决定在课程名称前添加this以消除任何歧义,但根据我的经验,这样做通常是不必要的,因为this只能提到一件事 - 代码正在执行的类的当前实例。是否有其他我忽略的建议将this关键字与类名称接口始终是更好的做法,或者是否存在任何情况,事实上,有必要吗?

4 个答案:

答案 0 :(得分:27)

要从内部类或匿名类中访问封闭类的实例,您需要使用以下语法:

EnclosingClass.this.someMethod();

答案 1 :(得分:10)

  

这实际上只有一件事。

这是不正确的。

  

还有其他我忽略的东西会建议将此关键字与类名称对接,这总是更好的做法,还是在任何情况下都是必要的?

分别是和是。特别是,内部类需要ClassName.this才能到达this的外部类实例。

例如:

  myButton.setOnClickListener(new Button.OnClickListener() {  
    public void onClick(View v) {
          startActivity(new Intent(MyActivity.this, MyOtherActivity.class));
        }
     });

此处,使用this代替MyActivity.this将因编译错误而失败,并抱怨Button.OnClickListener不是Intent构造函数的有效第一个参数。 MyActivity.this返回this,它是包含MyActivity实例的Button.OnClickListener实例。

答案 2 :(得分:0)

我没有那么多回购来发表评论,所以把它写下来作为答案。

我认为这个问题的基本关注点是检查使用classname.this是否有任何优势,而不是这个'在开发人员已经知道不会有任何内部类调用的场景中的关键字。

当然在内部类场景的情况下,你必须使用classname.this来调用它的封闭类。但是你可能已经知道这个特殊的代码不会被任何内部类调用。所以为什么要指定classname.this,而只是使用'这个'。

答案 3 :(得分:0)

Window win = SwingUtilities.getWindowAncestor(RedPanel.this);

通常你会在内部类中看到这样的代码。所以说你有一个名为RedPanel的类,它是JPanel的子类,并且在内部说你有一个实现ActionListener的匿名内部类。如果要引用ActionListener中的“this”RedPanel对象,则不能仅使用“this”,因为它引用的是ActionListener而不是RedPanel。要获得RedPanel“this”的句柄,您需要使用RedPanel.this。