这两种向 bean 属性添加列表的方法有什么区别吗?
private List<String> stringList;
public List<String> getStringList() {
return stringList;
}
public void setStringList(final List<String> stringList) {
this.stringList = stringList;
}
setStringList(list of strings)
getStringList().addAll(list of strings)
如果列表已包含条目,则这些条目将被方法 1 覆盖,因为您设置了列表的全新实例。
使用方法 2,只需将所有新条目添加到现有的列表实例中。
在第一种方法中,整个stringList
是用提供的列表初始化的。 但在第二种方法中,新列表的所有元素都被添加到现有stringList
中。
是的,有很大的区别,第一种方法是正确的。原因如下:
- 这是一个 setter 方法,因此,它应该
set
列表而不是添加元素。如果要add
,可以公开另一种方法,例如addStrings()
- 第二种方法是继续将元素添加到同一列表中,即如果用 10 个元素的列表调用 10 次,则结果列表将包含 100 个元素,这是不可取 的
- 如果列表
null
,第二种方法将引发NullPointerException
(如果对象是新list
创建的并且未分配任何值,则可能会如此)
在此处阅读有关getters
和setters
的更多信息。