Il existe deux façons de référencer l'instance d'une classe dans cette classe. Par exemple:
class Person {
String name;
public void setName(String name) {
this.name = name;
}
public void setName2(String name) {
Person.this.name = name;
}
}
On utilise this.name
pour référencer le champ objet, mais l'autre utilise className.this
pour référencer le champ objet. Quelle est la différence entre ces deux références?
Dans ce cas, ce sont les mêmes. La syntaxe Class.this
Est utile lorsque vous avez une classe imbriquée non statique qui doit faire référence à l'instance de sa classe externe.
class Person{
String name;
public void setName(String name){
this.name = name;
}
class Displayer {
String getPersonName() {
return Person.this.name;
}
}
}
Cette syntaxe ne devient pertinente que lorsque vous avez des classes imbriquées:
class Outer{
String data = "Out!";
public class Inner{
String data = "In!";
public String getOuterData(){
return Outer.this.data; // will return "Out!"
}
}
}
Vous avez seulement besoin d'utiliser className.this pour les classes internes. Si vous ne les utilisez pas, ne vous en faites pas.
Class.this
est utile pour référencer un OuterClass
non statique.
Pour instancier un InnerClass
non statique, vous devez d'abord instancier le OuterClass
. Par conséquent, un InnerClass
non statique aura toujours une référence de son OuterClass
et tous les champs et méthodes de OuterClass
sont disponibles pour le 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();
...
}
Dans cet exemple, les deux Innerclass
sont instanciés à partir du même Outerclass
, ils ont donc tous deux la même référence au Outerclass
.