这个关键字在android中

时间:2012-03-11 15:09:27

标签: android

为什么我们使用this关键字和Android中的方法名称来从同一个类中的另一个方法调用方法。在Java或C#中,我们可以在没有this关键字的情况下直接调用其他方法,如下面的代码所示。

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

5 个答案:

答案 0 :(得分:8)

在这种情况下, 不得使用this关键字,无论如何都是隐式完成的。有时它更清楚,有时它会使Eclipse自动完成方法名称:P

答案 1 :(得分:7)

关于“这个”要求的问题中的假设是不正确的。 它与java上的相同 - 您不必添加“this”关键字。

但是,如果您有多个具有相同名称的功能,但它们的范围不同(例如静态功能与普通功能),建议使用它。

另外,如果字段没有前缀(例如“m”或“_”),建议使用“this”。你也可以设置eclipse为这种情况自动添加“this”关键字。

答案 2 :(得分:7)

我希望你得到答案,但我只是在这里发帖,以便为寻找这个问题的人提供额外的理解。

this关键字表示当前活动或类或对象。

e.g。

private int number;

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

此处,this.number代表private int number变量,数字是方法int number

现在我们可以在内部类中使用“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());  
            }  
        });  
    }  
}  

日志文件是::

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  

答案 3 :(得分:2)

您只需撰写return getElementValue(n.item(0));即可。通常,this用于消除歧义,例如,如果构造函数的参数与属性具有相同的名称:

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

答案 4 :(得分:1)

在您的示例代码中,您可以跳过关键字this,因为您调用的方法属于同一个类。但是,我们使用 this 关键字的原因是在该类内部引用同一个类的对象。

根据java docs:

  

在实例方法或构造函数中,这是对它的引用   当前对象 - 其方法或构造函数所在的对象   调用。您可以从内部引用当前对象的任何成员   使用它的实例方法或构造函数。