setter 的正确格式
Correct format for setters
在过去的 4 年里,我一直在发展 Java 作为一种爱好,我对 Java Bean setter 的惯例很感兴趣。
如果我使用 Eclipse 生成我的设置器,我得到:
private String var;
public void setVar(String var){
this.var = var;
}
现在我明白了它是如何工作的,但对我(作为一个老开发者)来说,有两个同名的变量但识别不同的对象是令人困惑的。我发现如果您拼错了参数变量,例如 bar 它仍然可以编译但不起作用;
我倾向于使用:
private String var;
public void setVar(String varp){
var = varp;
}
任何人都可以解释这两种方法是否有任何效率或优势。
Can anyone explain are there any efficiencies or advantages of either method.
这纯粹是风格问题。这里有 两个 风格方面,稍微相互关联:
具有同名的实例变量(字段)和参数。
访问实例变量(或方法)时离开this.
。
使用相同的名称会强制您使用 this.
,但使用不同的名称并不意味着您不能使用 this.
,这就是为什么它们是独立但相互关联的样式问题。
所有这些都是有效的选择(假设实例变量声明),并且就编译器所做的而言,使用哪个都没有区别:
// 1
public void setVar(String var) {
this.var = var;
}
// 2
public void setVar(String varp) {
var = varp;
}
// 3
public void setVar(String varp) {
this.var = varp;
}
它对可维护性等有影响,但这归结为风格,这取决于您and/or您正在处理的项目的风格指南。
任何一种方法都没有优势。
编译出来的代码是相等的
为防止意外设置参数 var
而不是 this.var
,将 final
添加到(所有)参数是个好习惯。
public void setVar(final String var) {
this.var = var;
// var = var; // fails, because var cannot be set again.
重复变量名可以理解。有更清晰的获取和设置方式
public class test{
private String name;
public void setVar(String name){
name = name;
}
}
当您尝试设置值,并具有上述表达式时。
test t1 = new test();
t1.setVar("myValue");
代码要做的是
t1.name = myValue;
如果创建和操作 class 测试的多个对象,赋值会变得混乱,因为私有变量被访问并赋值。
你想要做的是确保你的对象持有的变量实例只被寻址。这就是为什么你添加
public class test{
private String name;
public void setVar(String name){
this.name = name;
}
}
现在,class 测试 t1、t2 .. 等的每个实例都将只对其对象进行操作。作为纯粹的可维护性,传递的变量的命名与我们要为其赋值的变量保持相同。
在过去的 4 年里,我一直在发展 Java 作为一种爱好,我对 Java Bean setter 的惯例很感兴趣。
如果我使用 Eclipse 生成我的设置器,我得到:
private String var;
public void setVar(String var){
this.var = var;
}
现在我明白了它是如何工作的,但对我(作为一个老开发者)来说,有两个同名的变量但识别不同的对象是令人困惑的。我发现如果您拼错了参数变量,例如 bar 它仍然可以编译但不起作用;
我倾向于使用:
private String var;
public void setVar(String varp){
var = varp;
}
任何人都可以解释这两种方法是否有任何效率或优势。
Can anyone explain are there any efficiencies or advantages of either method.
这纯粹是风格问题。这里有 两个 风格方面,稍微相互关联:
具有同名的实例变量(字段)和参数。
访问实例变量(或方法)时离开
this.
。
使用相同的名称会强制您使用 this.
,但使用不同的名称并不意味着您不能使用 this.
,这就是为什么它们是独立但相互关联的样式问题。
所有这些都是有效的选择(假设实例变量声明),并且就编译器所做的而言,使用哪个都没有区别:
// 1
public void setVar(String var) {
this.var = var;
}
// 2
public void setVar(String varp) {
var = varp;
}
// 3
public void setVar(String varp) {
this.var = varp;
}
它对可维护性等有影响,但这归结为风格,这取决于您and/or您正在处理的项目的风格指南。
任何一种方法都没有优势。 编译出来的代码是相等的
为防止意外设置参数 var
而不是 this.var
,将 final
添加到(所有)参数是个好习惯。
public void setVar(final String var) {
this.var = var;
// var = var; // fails, because var cannot be set again.
重复变量名可以理解。有更清晰的获取和设置方式
public class test{
private String name;
public void setVar(String name){
name = name;
}
}
当您尝试设置值,并具有上述表达式时。
test t1 = new test();
t1.setVar("myValue");
代码要做的是
t1.name = myValue;
如果创建和操作 class 测试的多个对象,赋值会变得混乱,因为私有变量被访问并赋值。
你想要做的是确保你的对象持有的变量实例只被寻址。这就是为什么你添加
public class test{
private String name;
public void setVar(String name){
this.name = name;
}
}
现在,class 测试 t1、t2 .. 等的每个实例都将只对其对象进行操作。作为纯粹的可维护性,传递的变量的命名与我们要为其赋值的变量保持相同。