2012-03-11 17 views
5

¿Por qué usamos la palabra clave this junto con el nombre del método en Android para llamar a un método desde otro método dentro de la misma clase. En Java o C# podemos llamar a otro método directamente sin la palabra clave this, como en el código siguiente.esta palabra clave en 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)); 
} 

Respuesta

6

la suposición en la pregunta sobre el "este" requisito es incorrecta. es lo mismo que en Java, no es necesario agregar la palabra clave "this".

Sin embargo, se recomienda utilizarlo cuando tiene varias funciones que tienen el mismo nombre, pero su alcance es diferente (por ejemplo, funciones estáticas vs normales).

Además, se recomienda que si los campos no tienen un prefijo (como "m" o "_"), debe usar "this". también puede configurar eclipse para agregar automáticamente la palabra clave "this" para dichos casos.

+0

¿Qué quiere decir con la declaración? "También, se recomienda que si los campos no tienen un prefijo (como" m "o" _ "), debe usar" this ". También puede configurar eclipse para agregue automáticamente la palabra clave "this" para dichos casos ". –

+0

se recomienda para que pueda diferenciar entre las variables normales (funciones internas) y las de la clase del objeto. –

8

Usted no tiene que utilizar la palabra clave this en este caso, se realiza de forma implícita de todos modos. A veces es más claro, y algunas veces hace que Eclipse complete automáticamente el nombre del método: P

+0

No entendí "Sometim es más claro, y algunas veces hace que Eclipse complete automáticamente el nombre del método ". –

+0

Al menos en mi computadora, eclipse autocompleta el método y los nombres de las variables solo si el objeto se ha especificado anteriormente, así que si no recuerdo el nombre exacto del método escribo 'this' y obtengo el nombre completo del método. En cuanto a más claro, es realmente una cuestión de gusto y estilo. – MByD

2

Simplemente escriba return getElementValue(n.item(0)); y funcionará. En general, this se utiliza para disipar la ambigüedad, por ejemplo, si los parámetros de un constructor tienen el mismo nombre que los atributos:

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

en el código de ejemplo, se puede omitir la palabra clave this como su método que está llamando está con en la misma clase. Sin embargo, la razón por la que usamos esta palabra clave es para hacer referencia al objeto de la misma clase mientras se está dentro de esa clase.

Según docs java:

Dentro de un método de instancia o un constructor, esto es una referencia al objeto actual - el objeto cuyo método o constructor está siendo llamada. Puede referirse a cualquier miembro del objeto actual desde un método de instancia o un constructor usando esto.

7

Espero que recibas tu respuesta, pero acabo de publicar aquí para proporcionar una comprensión adicional a quién busca esta pregunta.

this palabra clave representa la actividad actual o clase u objeto.

p. Ej.

private int number; 

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

aquí, this.number representa private int number número variable y es métodos int number

Ahora podemos usar palabra "this" como en la clase interna para representar clase actual,

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

el archivo de registro se ::

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