根据标题,是否有任何气味围绕提供的setter接受List
实例化以分配给实例变量?
即
public class Test{
private List<String> strings;
public Test() {}
public void setStrings(List<Strings> strings) {
this.strings = strings;
}
}
什么是更好的方法(除了域名细节)?
答案 0 :(得分:3)
您的代码的问题是您的setter的调用者可以修改列表,因为调用者仍然有一个引用。请考虑以下代码:
Test test = new Test();
List<String> list = new ArrayList<String>();
test.setStrings(list);
list.clear(); // oops! the state of Test has changed without Test knowing!
更好的方法是使用列表的副本:
public void setStrings(List<Strings> strings) {
this.strings = new ArrayList<String>(strings);
}
答案 1 :(得分:1)
这很好(我假设你也有一个吸气剂)我唯一可能做的就是拿一份清单而不是直接转让。
public void setStrings(List<Strings> strings) {
this.strings = new ArraysList<String>(strings);
}