我很好奇,从可变类返回对象的集合时,什么被认为是一个更好的做法:在Java中返回内部集合的最佳做法是什么?
public class Someclass {
public List<String> strings;
public add(String in){ strings.add(in); }
public remove(String in) { strings.remove(in); }
//THIS
public List<String> getStrings(){
return Collections.unmodifiableList(strings);
}
//OR THIS
public List<String> getStrings(){
return new ArrayList(strings);
}
}
我一直认为在包装不可修改的内部集合是最好的方法,因为我没看到这是造成创建副本开销的原因。然而,我发现,内部对列表所做的任何更改都会暴露给客户,这让我感到不好。
后一种方法使用新的ArrayList或使用.clone()是减少并发问题的正确方法。 Collections.unmodifiableList()增加了多线程环境中可能发生的并发问题。 – 2011-05-13 01:15:35