2012-03-11 5 views
5

동일한 클래스의 다른 메소드에서 메소드를 호출하려면 Android의 메소드 이름과 함께 this 키워드를 사용해야하는 이유는 무엇입니까? Java 또는 C#에서는 아래 코드와 같이 this 키워드없이 직접 다른 메서드를 호출 할 수 있습니다. 당신은 에없는android의 해당 키워드

public final String getElementValue(Node elem) 
{ 
    Node child; 
    if(elem != null) 
    { 
     if (elem.hasChildNodes()) 
     { 
      for(child = elem.getFirstChild(); child != null; child = child.getNextSibling()) 
      { 
       if(child.getNodeType() == Node.TEXT_NODE ) 
       { 
        return child.getNodeValue(); 
       } 
      } 
     } 
    } 
    return ""; 
} 

/** 
    * Getting node value 
    * @param Element node 
    * @param key string 
    * */ 
public String getValue(Element item, String str) 
{  
    NodeList n = item.getElementsByTagName(str);  
    return this.getElementValue(n.item(0)); 
} 

답변

6

"this"요구 사항에 대한 가정은 올바르지 않습니다. java와 동일하므로 "this"키워드를 추가 할 필요가 없습니다.

그러나 이름이 같지만 범위가 다른 여러 함수 (예 : 정적 함수와 일반 함수)가있을 때 사용하는 것이 좋습니다.

또한 필드에 접두사 (예 : "m"또는 "_")가없는 경우 "this"를 사용하는 것이 좋습니다. 당신은 또한 이클립스가 자동으로 "this"키워드를 추가하도록 설정할 수있다.

+0

성명에서 무엇을 의미합니까? "또한 필드에 접두사 (예 :"m "또는"_ ")가없는 경우"this "를 사용해야하며 이클립스를 자동으로 "this"키워드를 추가합니다. " –

+0

일반 변수 (내부 함수)와 객체 클래스의 함수를 구별 할 수 있도록하는 것이 좋습니다. –

8

이 경우에 this 키워드를 사용, 어쨌든 암시 적으로 이루어집니다. 경우에 따라 명확 해지며 때로는 Eclipse가 메소드 이름을 자동 완성합니다. P

+0

"Sometim es가 명확 해지며 때로는 Eclipse가 메소드 이름을 자동 완성합니다. " –

+0

적어도 내 컴퓨터에서 eclipse 자동 완료 메소드와 변수 이름은 객체가 이전에 지정된 경우에만 사용되므로 정확한 메소드 이름을 기억하지 못하면 'this.'로 작성하고 전체 메소드 이름을 가져옵니다. 더 명확하게 말하면 그것은 정말로 맛과 스타일의 문제입니다. – MByD

2

return getElementValue(n.item(0));을 쓰면 간단히 작성할 수 있습니다. 생성자의 매개 변수가 동일한 속성과 이름이있는 경우 일반적으로 this 예를 들어, 모호성을 해소하는 데 사용됩니다 : 귀하의 예제 코드에서

private int number; 
public Example(int number) { 
    this.number = number; // here `this` is mandatory 
} 
1

을, 당신은 당신이 함께 요구하고 당신의 방법으로 키워드 this를 건너 뛸 수 있습니다 같은 학급에서. 그러나 키워드를 사용하는 이유는 동일한 클래스의 객체를 참조하는 것입니다. 자바 문서 당으로서

- 그 방법 또는 생성자를 호출 중인 객체 인스턴스 메소드 또는 생성자 내

, 이것은 현재 오브젝트에 대한 참조이다. 이 메서드를 사용하여 내에있는 현재 개체의 모든 멤버를 인스턴스 메서드 또는 생성자를 참조 할 수 있습니다.

7

답변을 얻길 희망하지만이 질문을 찾는 사람에게 추가 이해를 제공하기 위해 게시합니다.

this 키워드는 현재 활동이나 클래스 또는 개체를 나타냅니다.

public class ClassChaosActivity extends Activity { 

    public static final String DEBUG_TAG = "MyLoggingTag"; 
    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     final TextView myTextview = (TextView) findViewById(R.id.TextViewToShow); 
     Button myButton = (Button) findViewById(R.id.ButtonToClick); 
     myButton.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View v) { 

       SimpleDateFormat formatter = new SimpleDateFormat("h:mm:ss a"); 
       String strWhen = formatter.format(new Date()); 
       myTextview.setText("Clicked at " + strWhen); 

       Log.v(DEBUG_TAG, "this Class name: " + this.getClass().getName()); 
       Log.v(DEBUG_TAG, "this extends interface named: " + this.getClass().getInterfaces()[0].getName()); 
       Log.v(DEBUG_TAG, "this Enclosing class name: " +this.getClass().getEnclosingClass().getName()); 
       Log.v(DEBUG_TAG, "this Is anonymous class? " + this.getClass().isAnonymousClass()); 

       Log.v(DEBUG_TAG, "ClassChaosActivity.this Class name: " + ClassChaosActivity.this.getClass().getName()); 
       Log.v(DEBUG_TAG, "ClassChaosActivity.this Super Class name: " + ClassChaosActivity.this.getClass().getSuperclass().getName()); 
       Log.v(DEBUG_TAG, "ClassChaosActivity.this Is anonymous class? " + ClassChaosActivity.this.getClass().isAnonymousClass()); 
      } 
     }); 
    } 
} 

로그 파일이 여기

private int number; 

public example(int number) { 
    this.number = number; 
} 

, this.numberprivate int number 변수를 나타내며 숫자는 방법 int number

이제 우리는 현재 클래스를 나타 내기 위해 내부 클래스에서 그대로 "이"키워드를 사용할 수있다 ::

10-24 18:18:53.075: VERBOSE/MyLoggingTag(751): this Class name: com.androidbook.classchaos.ClassChaosActivity$1 
10-24 18:18:53.085: VERBOSE/MyLoggingTag(751): this extends interface named: android.view.View$OnClickListener 
10-24 18:18:53.085: VERBOSE/MyLoggingTag(751): this Enclosing class name: com.androidbook.classchaos.ClassChaosActivity 
10-24 18:18:53.095: VERBOSE/MyLoggingTag(751): this Is anonymous class? true 
10-24 18:18:53.095: VERBOSE/MyLoggingTag(751): ClassChaosActivity.this Class name: com.androidbook.classchaos.ClassChaosActivity 
10-24 18:18:53.105: VERBOSE/MyLoggingTag(751): ClassChaosActivity.this Super Class name: android.app.Activity 
10-24 18:18:53.105: VERBOSE/MyLoggingTag(751): ClassChaosActivity.this Is anonymous class? false