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.

这纯粹是风格问题。这里有 两个 风格方面,稍微相互关联:

  1. 具有同名的实例变量(字段)和参数。

  2. 访问实例变量(或方法)时离开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 .. 等的每个实例都将只对其对象进行操作。作为纯粹的可维护性,传递的变量的命名与我们要为其赋值的变量保持相同。