我正在创建一个包含List的JavaBean,可以想到两种可能性:
public class JavaBeanWithSettableList {
private List<Integer> list;
public List<Integer> getList {
return list;
}
public void setList(final List<Integer> list) {
this.list = list;
}
}
...或...
public class JavaBeanWithUnsettableList {
private List<Integer> list = new ArrayList<Integer>();
public List<Integer> getList {
return this.list;
}
// No setter - need to use list.add(), list.remove() etc.
}
我见过的第二个用于另一个项目 - 似乎更好但我不确定这个设计来自哪里。任何人都可以指出我的文章命名模式和/或描述它的好处吗?
答案 0 :(得分:1)
此模式没有名称。第一个只是一个List
的类,第二个是内部创建的列表。
通常情况下,你的课程中的状态越少,不变性就越大。这样做的原因是,如果您的状态较少,则产生错误的可能性较小。
在您的情况下,例如,如果您使用第一种方法,那么您无法确保其他人没有为您的模型设置另一个列表。在第二种情况下,您无法确保有人不会在您的列表中拨打clear()
。
最后一切都取决于您的使用案例。如果您希望您的类保留一个列表但您不希望将来进行任何更改,则应使用不可变列表。否则,尽可能多地限制可变性。
答案 1 :(得分:1)
两者都不是最佳的。大概你想要......
public class ModelList {
private List<Integer> list;
ModelList() {
this.list = new ArrayList<Integer>();
}
ModelList(final List<Integer> list) {
this.list = list;
}
public ArrayList<Integer> getList {
return new ArrayList<Integer>(list); // Send back a copy, to make Immutable
}
}
答案 2 :(得分:0)
第一个问题是,每次要更新列表时,都需要创建一个新列表,从模型中获取列表,添加元素并将新列表设置为模型。
第二个允许你这样做而不需要获取列表并在之后重置它!