Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用;这";二传手_Java - Fatal编程技术网

Java 使用;这";二传手

Java 使用;这";二传手,java,Java,我看不出以下两种创建setter的方法之间有什么真正的区别,但我想知道我是否太天真了。一个比另一个更可取吗 public void fooSetter(String bar) { _bar = bar; } public void fooSetter(String bar) { this._bar = bar; } 你不需要“这个”,因为没有歧义。(“bar”和“_bar”是不同的。如果您的字段也被称为“bar”,那么您就需要它)我更喜欢第二种方法,因为它让读者明白,而且它

我看不出以下两种创建setter的方法之间有什么真正的区别,但我想知道我是否太天真了。一个比另一个更可取吗

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


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

你不需要“这个”,因为没有歧义。(“bar”和“_bar”是不同的。如果您的字段也被称为“bar”,那么您就需要它)

我更喜欢第二种方法,因为它让读者明白,而且它是一致的,因为当参数和字段的名称相同时(为了区分所设置的内容,需要使用它)。不过,在本例中,这两者之间没有功能上的区别。

这是明确的,因此许多人更喜欢它。然而,在某些情况下,差异是显著的。e、 g.具有相同名称的成员变量和局部变量

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

这是一个有点做作的例子,但你明白了。

当你在Java中使用setter时,
这有助于跳出当前变量范围。如果你有

private String bar = "";

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

这将正确地设置类变量而不是函数变量,在这种情况下没有语义差异,因为没有歧义。另一方面,如果实例字段也被称为
bar
,则需要
来消除歧义:

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

你的二传手应该是

setFoo(String foo) 

遵守javabean约定


如果setter(foo)中的引用名称与类上的属性相同,那么应该使用“this”来表示

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

我会用这样的方法,通过给变量的名字更明确的目的来防止歧义

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

这是我的第一选择,第二个是使用<强> < <强> >,我不考虑下划线。

< P>不同的风格主要是因为程序员在java之前做过什么,公司有什么编码标准等等。 所需的样式是使用:

    public class A {
          private Type property;

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

          public void setProperty(Type property){
              this.property = property;
          }
    }
这是一种最佳实践风格,符合标准

一个比另一个更可取吗

public void fooSetter(String bar)
{
    _bar = 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也会用蓝色突出显示类变量,其中局部变量保持黑色,这会很有帮助

值得一提的是,
\u-bar
中的下划线对于Java中的私有成员变量来说不是常规的-通常只是
bar
。正确的是,\u-bar不是常规的,但它似乎比m-bar更紧凑,而且其含义似乎仍然很清楚。@Noel m:没错。当然,核心API似乎也喜欢setter方法的单字母参数=/但为什么是酒吧?为什么不只是“酒吧”?所有这些酒吧酒吧MYBAR的东西是一个遗物的C++,在那里是需要的。Java中不需要。
这并不是为了消除歧义,只是为了明确引用该实例的变量。即使没有必要,我也倾向于使用它disambiguate@Noel:下划线编码约定还不够吗?我真的很讨厌多余的
这个
关键词:PUnderscore不是惯例Java@Noel:不,但是如果有人在使用它,那么使用
这个
也毫无意义。@Thorarin使用什么<代码>此
?这是一个关键字,不能用于其他任何内容。字段不应以下划线开头。虽然这是有争议的,但它可能会导致操作pojo的框架出现问题。