В чем разница между Class.this и этим в Java
Существует два способа ссылки на экземпляр класса внутри этого класса. Например:
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
для ссылки на поле объекта. В чем разница между этими двумя ссылками?
Ответы
Ответ 1
В этом случае они одинаковы. Синтаксис Class.this
полезен, если у вас есть нестатический вложенный класс, который должен ссылаться на его экземпляр внешнего класса.
class Person{
String name;
public void setName(String name){
this.name = name;
}
class Displayer {
String getPersonName() {
return Person.this.name;
}
}
}
Ответ 2
Этот синтаксис становится актуальным только тогда, когда у вас есть вложенные классы:
class Outer{
String data = "Out!";
public class Inner{
String data = "In!";
public String getOuterData(){
return Outer.this.data; // will return "Out!"
}
}
}
Ответ 3
Вам нужно всего лишь использовать className.this для внутренних классов. Если вы не используете их, не беспокойтесь об этом.
Ответ 4
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
.