2
class Foo(){

String name;

public Foo(String name){
   //code to be inserted
}

public void setName(String name){
   this.name = name;
}

}

在缺少的行中插入什么会更好,为什么:

1.)this.name = name;

2.)setName(name);

4

5 回答 5

6

由你决定。

例如,如果您想在将传递给构造函数的属性存储到name变量中之前对其执行一些验证,请调用 setter。

但是如果你想避免这种验证,或者你的 setter 可能抛出异常,直接分配变量。

这里最重要的是在构造函数方法的末尾创建了一个一致的实例。

于 2013-03-11T11:06:58.513 回答
2
setName(name); 

以防万一您在 setter 中添加了一些检查,否则您可以避免 setter。

例如

public void setWeight(int weight){
  if(weight<=0)
    this.weight = 50;  // set some default/average weight
  else
    this.weight = weight;
}
于 2013-03-11T11:06:51.180 回答
1

一般来说,setter 调用更安全。setter 可能有额外的逻辑:

  1. 数据验证
  2. 状态更新:例如,设置集合的容量有时意味着将数据复制到更大的容器中。
  3. 状态更新以维护类不变量:设置一个字段可能需要更改另一个字段以使其保持一致。
于 2013-03-11T11:12:35.393 回答
0

在我看来,最好的方法是传递 setter 方法中的值以及在为该类创建对象时更重要的值,然后将它们传递给构造函数。

如果你尝试在构造函数中传递所有值,那么随着你的类的增长,它会变得更大更丑,因为有太多参数来创建对象。

因此,例如,假设您的类 Foo 依赖于属性 int id,并假设您需要始终基于此 id 在构造函数中执行一些逻辑。因此,您将创建一个传递此 ID 的构造函数。稍后使用 setter 方法向该对象的属性添加值。

  Foo(int id){

  }
于 2013-03-11T11:11:30.770 回答
0
class Foo(){

   String name;

   public Foo(String name){
      this.name = name;    
   }

}

在设置您可以调用的名称时Foo(name)

于 2013-03-11T11:05:48.153 回答