[英]Using “this” in setters
我發現以下兩種創建setter的方法沒有真正區別,但我想知道我是不是天真。 比另一個更令人滿意嗎?
public void fooSetter(String bar)
{
_bar = bar;
}
public void fooSetter(String bar)
{
this._bar = bar;
}
在這種情況下沒有語義差異,因為沒有歧義。 另一方面,如果您的實例字段也被稱為bar
那么this
將需要消除歧義:
public void fooSetter(String bar)
{
this.bar = bar;
}
你不需要“這個”,因為沒有歧義。 (“bar”和“_bar”是不同的。現在如果你的領域被稱為“bar”,你需要它)
不同的風格主要是由程序員在Java之前做的事情,公司中存在的編碼標准等引起的。
所需的風格是使用:
public class A {
private Type property;
public Type getProperty(){
return this.property;
}
public void setProperty(Type property){
this.property = property;
}
}
這是一種最佳實踐風格,符合JavaBeans標准。
當您在Java中使用setter時, this
有助於逃避當前的變量范圍。 如果你反而擁有
private String bar = "";
public void fooSetter(String bar){
this.bar = bar
}
這將正確設置類變量而不是該函數變量
比另一個更令人滿意嗎?
取決於您想要使用的范圍 -
public class myClass{
private int number=5;
private void setNumbers(float number){
number=1; // refers to local variable (float)
this.number=2; // refers to class variable (int)
}
}
我喜歡在引用類變量時使用“this.variable”,你會注意到Eclipse也會突出顯示藍色的類變量,其中局部變量保持黑色,這可能會有所幫助。
我更喜歡第二種方式,只是因為它使讀者清楚並且它是一致的,因為當參數和字段都被命名為相同時(當必要時區分正在設置的內容時)需要它。 但是,在這個例子中,兩者之間沒有功能差異。
this
是明確的,因此很多人都喜歡this
。 但是,在某些情況下,差異很大。 例如,成員變量和同名的局部變量。
public void fooSetter(String bar)
{
String _bar = fancyfilter(bar);
this._bar = _bar;
}
一個有點人為的例子,但你明白了。
你的二傳手應該是
setFoo(String foo)
和
public String getFoo()
符合javabean約定。
如果setter(foo)中的引用名稱與類中的屬性相同,那么您應該使用'this'來顯式。
如前所述,這是毫不含糊的,但我更喜歡不使用它 。
我會選擇這樣的東西,通過賦予變量目的更明確的名稱來防止歧義。
public void setBar(String newBar)
{
bar = newBar;
}
這將是我的第一選擇,第二個是使用這個 ,我不會考慮下划線。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.