使用 getter 和 setter 方法将列表添加到 bean 属性 之间的区别?

Difference between using getter and setter methods to add list to a bean property?

这两种添加列表到bean的方式有区别吗属性?

private List<String> stringList;

public List<String> getStringList() {
    return stringList;
}

public void setStringList(final List<String> stringList) {
    this.stringList = stringList;
}
  1. setStringList(list of strings)
  2. getStringList().addAll(list of strings)

如果列表已经包含条目,则这些条目将被方法 1 覆盖,因为您设置了一个全新的列表实例。

使用方法 2,您只需将所有新条目添加到已经存在的列表实例中。

在第一种方法中,整个 stringList 使用提供的列表进行初始化。 但是在第二种方法中,新列表的所有元素都添加到现有的 stringList .

是的,有很大的区别,第一种方法是正确的。原因如下:

  • 这是一个 setter 方法,因此,它应该 set 列表而不是添加元素。如果你想add,你可以公开另一个方法,比如addStrings()
  • 第二种方法会继续将元素添加到同一个列表中,即如果使用包含 10 个元素的列表调用 10 次,结果列表将包含 100 个元素,这是不可取的
  • 如果列表是 null,第二种方法将抛出 NullPointerException(如果对象是新创建的并且 list 未分配任何值,则可能会是)

阅读有关 getterssetters here 的更多信息。