我发现以下两种创建setter的方法没有真正区别,但我想知道我是不是天真。比另一个更令人满意吗?
public void fooSetter(String bar)
{
_bar = bar;
}
public void fooSetter(String bar)
{
this._bar = bar;
}
答案 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;
}
这将是我的第一选择,第二种是使用这个,我不会考虑下划线。