在setters中使用“this”

时间:2010-08-11 17:07:52

标签: java

我发现以下两种创建setter的方法没有真正区别,但我想知道我是不是天真。比另一个更令人满意吗?

public void fooSetter(String bar)
{
    _bar = bar;
}


public void fooSetter(String bar)
{
    this._bar = bar;
}

9 个答案:

答案 0 :(得分:16)

在这种情况下没有语义差异,因为没有歧义。另一方面,如果您的实例字段也被称为bar,那么this将需要消除歧义:

public void fooSetter(String bar)
{
    this.bar = bar;
}

答案 1 :(得分:7)

你不需要“这个”,因为没有歧义。 (“bar”和“_bar”是不同的。现在,如果你的领域也被称为“bar”,你需要它)

答案 2 :(得分:4)

不同的风格主要是程序员在Java之前所做的事情,公司中存在的编码标准等等。

所需的风格是:

    public class A {
          private Type property;

          public Type getProperty(){
              return this.property;
          }

          public void setProperty(Type property){
              this.property = property;
          }
    }

这是一种最佳实践风格,符合​​JavaBeans标准。

答案 3 :(得分:2)

当您在Java中使用setter时,this可以帮助您逃避当前的变量范围。如果你改为

private String bar = "";

public void fooSetter(String bar){
  this.bar = bar
}

这将正确设置类变量而不是该函数变量

答案 4 :(得分:2)

  

比另一个更令人满意吗?

取决于您要使用的范围 -

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也会突出显示蓝色的类变量,其中局部变量保持黑色,这可能会有所帮助。

答案 5 :(得分:1)

我更喜欢第二种方式,只是因为它使读者清楚并且它是一致的,因为当参数和字段都被命名为相同时(当必要时区分正在设置的内容时)需要它。但是,在这个例子中,两者之间没有功能差异。

答案 6 :(得分:1)

this是明确的,因此被许多人所青睐。但是,在某些情况下,差异很大。例如一个成员变量和同名的局部变量。

public void fooSetter(String bar)
{
    String _bar = fancyfilter(bar);
    this._bar = _bar;
}

一个有点人为的例子,但你明白了。

答案 7 :(得分:1)

你的主持人应该是

setFoo(String foo) 

public String getFoo() 

符合javabean惯例。

如果setter(foo)中的引用名称与类中的属性相同,那么您应该使用'this'来显式。

答案 8 :(得分:1)

如前所述,这是明确的,但我更喜欢不使用这个

我会选择这样的东西,通过赋予变量目的更明确的名称来防止歧义。

public void setBar(String newBar)
{
    bar = newBar;
}

这将是我的第一选择,第二种是使用这个,我不会考虑下划线。