Quelle est la différence entre Class.this et ceci en Java

Il existe deux manières de référencer l’instance d’une classe dans cette classe. Par exemple:

class Person { Ssortingng name; public void setName(Ssortingng name) { this.name = name; } public void setName2(Ssortingng name) { Person.this.name = name; } } 

On utilise this.name pour référencer le champ object, mais l’autre utilise className.this pour référencer le champ object. Quelle est la différence entre ces deux références?

Dans ce cas, ils sont les mêmes. La syntaxe de Class.this est utile lorsque vous avez une classe nestede non statique qui doit faire référence à l’instance de sa classe externe.

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

Cette syntaxe ne devient pertinente que lorsque vous avez des classes nestedes:

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

Vous devez uniquement utiliser className.this pour les classes internes. Si vous ne les utilisez pas, ne vous inquiétez pas.

Class.this est utile pour faire référence à une OuterClass non statique.

Pour instancier une InnerClass non InnerClass , vous devez d’abord instancier l’ OuterClass . Par conséquent, un InnerClass non InnerClass aura toujours une référence à son OuterClass et tous les champs et méthodes de OuterClass sont disponibles pour InnerClass .

 public static void main(Ssortingng[] 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ées à partir de la même Outerclass elles ont donc toutes deux la même référence à la Outerclass .