Regardez le code suivant que je copie à partir de javax.naming.InitialContext. Un argument de type HashTable est en cours de transmission au constructeur. ici est l'extrait de codeJava Code - Pourquoi une variable est clonée ici?
public InitialContext(Hashtable<?,?> environment) throws NamingException
{
if (environment != null) {
environment = (Hashtable)environment.clone();
}
init(environment);
}
Ma question est, pourquoi l'environnement est cloné ici quand il aurait pu être passé directement à la méthode d'initialisation?
Je pense que je reformulerais ta première phrase à "Ce code protège * lui-même * d'un appelant externe en changeant l'état du HashTable". Bien que ce soit une protection très limitée, étant donné que H'ashtable.clone() 'est un clone peu profond: l'appelant peut toujours changer les valeurs mutables (je ne me souviens pas si les valeurs de contexte sont limitées aux chaînes ou non). – Anon
@Anon, bon conseil. Terminé. – jjnguy
@Anon, les chances sont bonnes que la seule chose qui les inquiète sont les ajouts ou les suppressions. Ils utilisent probablement des objets immuables comme clés ou valeurs. – jjnguy