您更喜歡哪種?爲什麼?在Java中使用「this」與簡短參數名稱
public void setPresenter(Presenter presenter) {
this.presenter = presenter;
}
public void setPresenter(Presenter p) {
presenter = p;
}
您更喜歡哪種?爲什麼?在Java中使用「this」與簡短參數名稱
public void setPresenter(Presenter presenter) {
this.presenter = presenter;
}
public void setPresenter(Presenter p) {
presenter = p;
}
我喜歡this
-notation,至少在構造函數和複合setter方法,那就是你有多個參數。
在setter的特定情況下,我沒有真正的意見,因爲方法名稱足夠說明問題,並且實現是一個賦值。
我喜歡this
- 這個類說明了爲什麼
class foo {
int value;
int otherValue;
void setValue(int i) {
value = i;
}
void setOtherValue(int i) {
otherValue = i;
}
// uhh what?
void setBoth(int i, int j) {
// which one should be first? oh, you guessed and got it wrong? tooooo bad!
}
}
這是一個可怕的,完全人爲的例子。 – 2011-05-07 06:57:18
我不太確定問題在這裏,但我猜setBoth中的歧義是setValue和setOtherValue都使用了參數i,它讓我感到困惑,應該調用setBoth來設置我嗎? – 2011-05-07 07:00:36
@Aram基本上。 @Monkey假設你在你的IDE中,並且你做了'myFoo.setBoth('並且它彈出了'i'和'j'的名字,它真的不像它說'value'和otherValue那麼明顯' – corsiKa 2011-05-07 07:03:06
我不喜歡使用this
因爲(accidentially)留出來(雖然主要是使用它)可能導致對更長的方法陰影錯誤。
但是,您應該爲參數使用明智的名稱。 這就是爲什麼我更喜歡使用的參數和局部變量的前綴:
public void setPresenter(Presenter pPresenter) {
presenter = pPresenter; //pXxxx stands for 'parameter'
Presenter tPresenter = pPresenter; //tXxxx stands for 'temporary' or local
}
使用'b'和成員變量的前綴布爾變量與'm_'一起嗎?;-) – aioobe 2011-05-07 06:54:35
不,我沒有使用匈牙利表示法,也沒有爲成員使用前綴。 :)如上所述,這可以更容易地防止影子錯誤,以及您是否正在使用參數,局部變量或成員 - 特別是在較長的方法中。 – Thomas 2011-05-07 06:55:52
這與Software Monkey的建議類似,更接近我發佈的第二種方法。我認爲問題的關鍵是確保本地範圍變量與成員變量分離。我傾向於過度使用「這個」來明確這一點,但有些情況下它變得多餘 - 就像短小的製片人一樣。 – 2011-05-07 07:13:49
我們用實例變量的TLA的方法充分的話,那麼我們將有:
public void setPresenter(Presenter prs) {
presenter=prs;
}
這使得相當清楚的名字避免了由於省略了this
而導致的錯誤分配錯誤,並將長期/大範圍標識符與短期/窄範圍標識符區分開來。
+1:你的前兩個理由是好的。我對最後一個不太確定。 – 2011-05-07 06:58:11
對,我同意。編寫最後一個時,我實際上已經考慮過構造函數。 – aioobe 2011-05-07 06:58:55