看看下面的代碼,我從複製javax.naming.InitialContext。 HashTable類型的參數正在傳遞給構造函數。這裏是代碼片段Java代碼 - 爲什麼要在這裏克隆一個變量?
public InitialContext(Hashtable<?,?> environment) throws NamingException
{
if (environment != null) {
environment = (Hashtable)environment.clone();
}
init(environment);
}
我的問題是,爲什麼環境被克隆在這裏時,它可以直接傳遞給init方法?
我想我會將你的第一句話改寫爲「此代碼正在保護*本身*從外部調用者更改HashTable的狀態。」儘管這是一個非常有限的保護,但是H'ashtable.clone()'是一個淺層克隆:調用者仍然可以更改可變值(我不記得上下文值是否僅限於字符串)。 – Anon 2010-11-12 15:48:58
@Anon,很好的建議。完成。 – jjnguy 2010-11-12 15:50:44
@Anon,他們唯一擔心的是增加或刪除的機會很大。他們可能使用不可變對象作爲鍵或值。 – jjnguy 2010-11-12 15:52:01