Посмотрите на следующий код, который я копирую с javax.naming.InitialContext. Аргумент типа HashTable передается конструктору. вот фрагмент кодаJava Code - Почему здесь клонируется переменная?
public InitialContext(Hashtable<?,?> environment) throws NamingException
{
if (environment != null) {
environment = (Hashtable)environment.clone();
}
init(environment);
}
Мой вопрос, почему окружающая среда быть клонирована здесь, когда это могло быть передано непосредственно к инициализации методе?
Я думаю, что переделаю ваше первое предложение на «Этот код защищает себя» от внешнего вызывающего, изменяющего состояние HashTable ». Хотя это очень ограниченная защита, учитывая, что H'ashtable.clone() 'является мелким клоном: вызывающий может по-прежнему изменять изменяемые значения (я не могу вспомнить, ограничены ли значения контекста строками или нет). – Anon
@ Не знаю, хороший совет. Готово. – jjnguy
@ Невысокие шансы хороши, что единственное, о чем они беспокоятся, это дополнения или абсорбции. Вероятно, они используют неизменяемые объекты в качестве ключей или значений. – jjnguy