【问题标题】:What is the difference between Class.this and this in JavaJava中的Class.this和this有什么区别
【发布时间】:2011-08-05 16:28:11
【问题描述】:

有两种方法可以在该类中引用该类的实例。例如:

class Person {
  String name;

  public void setName(String name) {
    this.name = name;
  }

  public void setName2(String name) {
    Person.this.name = name;
  }
}

一个使用this.name 引用对象字段,而另一个使用className.this 引用对象字段。这两个引用有什么区别?

【问题讨论】:

    标签: java this


    【解决方案1】:

    在这种情况下,它们是相同的。当您有一个需要引用其外部类实例的非静态嵌套类时,Class.this 语法很有用。

    class Person{
        String name;
    
        public void setName(String name){
            this.name = name;
        }
    
        class Displayer {
            String getPersonName() { 
                return Person.this.name; 
            }
    
        }
    }
    

    【讨论】:

    • 如果您只是说“返回名称”而不是 Person.this.name,那将不起作用吗?
    • @Amit G - 在这个例子中,是的,它会起作用。但是,有时您需要澄清您使用的是哪个“this”(例如,成员变量名称或方法名称是否存在冲突)。请参阅 Michael 的回答以获取相关示例。
    • 一个例子是当你必须将Person.this的引用指向另一个对象时。
    【解决方案2】:

    Class.this 可用于引用非静态的OuterClass

    要实例化非静态InnerClass,您必须先实例化OuterClass。因此,非静态 InnerClass 将始终具有其 OuterClass 的引用,并且所有 OuterClass 的字段和方法可用于InnerClass

    public static void main(String[] args) {
    
            OuterClass outer_instance = new OuterClass();
            OuterClass.InnerClass inner_instance1 = outer_instance.new InnerClass();
            OuterClass.InnerClass inner_instance2 = outer_instance.new InnerClass();
            ...
    }
    

    在本例中,Innerclass 都从同一个 Outerclass 实例化,因此它们都具有对 Outerclass 的相同引用。

    【讨论】:

      【解决方案3】:

      这个语法只有在你有嵌套类时才有意义:

      class Outer{
          String data = "Out!";
      
          public class Inner{
              String data = "In!";
      
              public String getOuterData(){
                  return Outer.this.data; // will return "Out!"
              }
          }
      }
      

      【讨论】:

        【解决方案4】:

        您只需要对内部类使用 className.this。如果您不使用它们,请不要担心。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2010-11-06
          • 2011-04-12
          • 2011-04-10
          • 1970-01-01
          • 2013-08-09
          • 1970-01-01
          • 2012-10-06
          相关资源
          最近更新 更多