簡體   English   中英

在setters中使用“this”

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM