[java] 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를 참조하는 데 사용하고 다른 하나는 개체 필드 를 참조하는 데 사용 합니다. 이 두 참조의 차이점은 무엇입니까?



답변

이 경우 동일합니다. 이 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.


답변