2011-04-14 2 views
98

해당 클래스 내에서 클래스 인스턴스를 참조하는 두 가지 방법이 있습니다. 예를 들어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를 이용한다. 이 두 참조의 차이점은 무엇입니까?

답변

127

이 경우에도 동일합니다. Class.this 구문은 외부 클래스의 인스턴스를 참조해야하는 정적이 아닌 중첩 클래스가있는 경우 유용합니다.

class Person{ 
    String name; 

    public void setName(String name){ 
     this.name = name; 
    } 

    class Displayer { 
     String getPersonName() { 
      return Person.this.name; 
     } 

    } 
} 
+2

Person.this.name 대신 방금 "return name"이라고 쓰면 작동하지 않겠습니까? –

+6

@Amit G -이 예에서 예, 작동합니다. 그러나 사용중인 "this"를 명확히해야 할 때가 있습니다 (예 : 멤버 var 이름이나 메소드 이름에 충돌이있는 경우). 관련 사례에 대한 마이클의 대답을 참조하십시오. – jtahlborn

+1

아, 네, 고마워요! –

13

내부 클래스에는 className.this 만 사용해야합니다. 사용하지 않는다면 걱정하지 마십시오. 당신이 클래스를 중첩 한 경우

70

이 구문에만 해당됩니다 :

class Outer{ 
    String data = "Out!"; 

    public class Inner{ 
     String data = "In!"; 

     public String getOuterData(){ 
      return Outer.this.data; // will return "Out!" 
     } 
    } 
} 
+3

아, 나를 예를 때렸다. –

3

Class.this 정적하지 OuterClass을 참조 할 때 유용합니다.

nonstatic 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(); 
     ... 
} 

그러므로 그들은 모두 Outerclass 동일한 참조가 동일한 Outerclass로부터 인스턴스화된다.