我很好奇,從可變類返回對象的集合時,什麼被認爲是一個更好的做法:在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