クラス内のクラスのインスタンスを参照するには、2つの方法があります。例えば:
class Person {
String name;
public void setName(String name) {
this.name = name;
}
public void setName2(String name) {
Person.this.name = name;
}
}
1つはthis.name
を使用してオブジェクトフィールドを参照しますが、もう1つはclassName.this
を使用してオブジェクトフィールドを参照します。これら2つの参照の違いは何ですか?
この場合、それらは同じです。 Class.this
構文は、外部クラスのインスタンスを参照する必要がある非静的なネストされたクラスがある場合に役立ちます。
class Person{
String name;
public void setName(String name){
this.name = name;
}
class Displayer {
String getPersonName() {
return Person.this.name;
}
}
}
この構文は、ネストされたクラスがある場合にのみ関連します。
class Outer{
String data = "Out!";
public class Inner{
String data = "In!";
public String getOuterData(){
return Outer.this.data; // will return "Out!"
}
}
}
内部クラスに対してのみclassName.thisを使用する必要があります。それらを使用していない場合は、心配しないでください。
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
への同じ参照を持っています。