What is the difference between Class.this and this in Java
There are two ways to reference the instance of a class within that class. For example:
class Person {
String name;
public void setName(String name) {
this.name = name;
}
public void setName2开发者_如何学Go(String name) {
Person.this.name = name;
}
}
One uses this.name
to reference the object field, but the other uses className.this
to reference the object field. What is the difference between these two references?
In this case, they are the same. The Class.this
syntax is useful when you have a non-static nested class that needs to refer to its outer class's instance.
class Person{
String name;
public void setName(String name){
this.name = name;
}
class Displayer {
String getPersonName() {
return Person.this.name;
}
}
}
This syntax only becomes relevant when you have nested classes:
class Outer{
String data = "Out!";
public class Inner{
String data = "In!";
public String getOuterData(){
return Outer.this.data; // will return "Out!"
}
}
}
You only need to use className.this for inner classes. If you're not using them, don't worry about it.
Class.this
is useful to reference a not static OuterClass
.
To instantiate a nonstatic InnerClass
, you must first instantiate the OuterClass
. Hence a nonstatic InnerClass
will always have a reference of its OuterClass
and all the
fields and methods of OuterClass
is available to the 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();
...
}
In this example both Innerclass
are instantiated from the same Outerclass
hence they both have the same reference to the Outerclass
.
精彩评论