为什么我们使用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));
}
答案 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:
在实例方法或构造函数中,这是对它的引用 当前对象 - 其方法或构造函数所在的对象 调用。您可以从内部引用当前对象的任何成员 使用它的实例方法或构造函数。