我只是对使用this
感到好奇,因为Android的示例代码和文档没有使用this
关键字(我喜欢相信android工程师一般聪明,因此我用它们作为基础)。我只是对Android工程师没有多少使用this
的根本原因感到好奇。
答案 0 :(得分:7)
它主要是风格上的差异。我还没有看到为什么它的好坏。我个人喜欢使用它,当你需要使用它时会有一些例子。
例如,如果您有一个想要调用父类方法的Anonymous Inner类,则需要this
。例如:
class MyClass{
protected void doSomething(){
}
OnClickListener n = new OnClickListener(){
public void onClick(View v){
MyClass.this.doSomething();
}
};
}
使用this
的另一个原因是方法参数掩盖了成员变量。在这种情况下,你可以使用this
来区分这两者,虽然我建议你将参数重命名为非掩盖的东西。
class MyClass{
protected int val;
public void setVal(int val){
this.val = val; // set the member variable equal to the method argument
}
}
使用this
的另一个原因是从该实例中传递指向当前类实例的指针。例如,当您创建新的Intent
Intent i = new Intent(this, NewActivity.class);
您可能需要更多地方使用this
。这是我想到的最初几个。
答案 1 :(得分:1)
没关系,但如果您在代码中使用“this”,请确保在任何地方都使用它。这使您的代码清晰。
答案 2 :(得分:1)
是什么让你认为是这样的?例如。 SDK coding style guide没有提到这一点,我看到它被用于各个地方。但是,遵循变量的命名准则通常是没有必要的,可以省略,这通常就是这种情况。
当引用使用this关键字的实例时,为了清晰起见,但是正如文档中提到的那样,没有真正强制执行的样式,并且遵循命名规则使得它不是必需的。
e.g。在有和没有这个命名的命名后,一个完全有效的setter可能是
private int mCounter;
public void setCounter(int counter) {
mCounter = counter
}
private int increment;
public void setIncrement(int increment) {
this.increment = increment
}
请注意,在第一个例子中你可以,但不必使用它。在第二个你必须和第一个它可能更接近风格指南..
答案 3 :(得分:0)
这比个人做法更有个人品味。
答案 4 :(得分:0)
不,不是,在Android的示例代码中有对'this'的引用,但是没有理由认为它是一种不好的做法。很多时候它是不必要的,为简洁起见可能省略了它。
例如,从它定义的类中调用methodA()可以调用this.methodA()。在这种情况下这是不必要的,因为这是在你打电话时隐含的。它通常用于setter,其中参数名称与您正在设置的变量名称相同。
public void setName(String name) {
this.name = name;
}
答案 5 :(得分:0)
使用this
更像是一种安全措施:
class MyClass{
void doSomething() {
}
OnClickListener n = new OnClickListener() {
void doSomething() {
}
public void onClick(View v){
MyClass.this.doSomething(); // MyClass#doSomething()
this.doSomething(); // OnClickListener#doSomething()
doSomething(); // OnClickListener#doSomething() if present,
// MyClass#doSomething() otherwise - danger!
}
};
}
由于有些情况下您无法控制成员或方法的存在(例如,当OnClickListener
是第三方类时),为了获得可预测的行为,您应该总是限定此类引用。除非变量行为正是你想要的。