在 Java 中 Class.this 和 this 的区别是什么

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

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引用对象字段。这两个引用之间的区别是什么?

41667 次浏览

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

class Person{
String name;


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


class Displayer {
String getPersonName() {
return Person.this.name;
}


}
}

对于内部类,您只需要使用 className.this。

只有当您拥有嵌套类时,这种语法才变得相关:

class Outer{
String data = "Out!";


public class Inner{
String data = "In!";


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

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的引用是相同的。