What is the difference between Class.this and this in Java
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
.
You only need to use className.this for inner classes. If you're not using them, don't worry about it.
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!"
}
}
}
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;
}
}
}