2012-03-11 4 views
5

Почему мы используем ключевое слово this вместе с именем метода в Android для вызова метода из другого метода в пределах одного класса. В 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

предположение в вопросе о «этом» требовании неверно. это то же самое, что и на java - вам не нужно добавлять «это» ключевое слово.

Однако рекомендуется использовать его, когда у вас есть несколько функций с одинаковым именем, но их область действия различна (например, статические и обычные функции).

также рекомендуется, чтобы в случае, если поля не имеют префикса (например, «m» или «_»), вы должны использовать «это». вы также можете настроить eclipse для автоматического добавления ключевого слова «this» для таких случаев.

+0

Что вы подразумеваете под утверждением - «также рекомендуется, чтобы в случае, если поля не имеют префикса (например,« m »или« _ »), вы должны использовать« this ». Вы также можете установить затмение в автоматически добавьте ключевое слово «this» для таких случаев ». –

+0

рекомендуется, чтобы вы могли различать обычные переменные (внутренние функции) и функции класса объекта. –

8

Вы не должны использовать this ключевое слово в данном случае, это делается неявно в любом случае. Иногда это яснее, и иногда это заставляет Eclipse автоматически заполнять имя метода: P

+0

Я не понял "Sometim es, это яснее, и иногда это заставляет Eclipse автоматически заполнять имя метода ». –

+0

По крайней мере, на моем компьютере, метод eclipse auto-completes и имена переменных только в том случае, если объект указан раньше, поэтому, если я не помню точного имени метода, я пишу - '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 ключевое слово представляет текущую деятельность или класс или объект.

например.

private int number; 

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

здесь, this.number представляет private int number переменную и число методов int number

Теперь мы можем использовать «это» ключевое слово, как во внутреннем классе, чтобы представить текущий класс,

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

файл журнала ::

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 
Смежные вопросы