Tenir compte cet extrait de code:meilleures pratiques pour retour des références d'objets
class MyClass{
private List myList;
//...
public List getList(){
return myList;
}
}
Comme Java passe références d'objets par valeur, je crois comprendre que tout objet appelant getList()
va obtenir une référence à myList
, lui permettant de modifier myList
malgré c'est private
. Est-ce exact?
Et, si elle est correcte, devrais-je utiliser
return new LinkedList(myList);
pour créer une copie et passer de nouveau une référence à la copie plutôt que l'original, afin d'empêcher l'accès non autorisé à la liste référencée par myList
?
techniquement, aucun client externe ne pourra changer la valeur du champ myList dans votre classe. Ce sera toujours un handle/référence à List, référençant la liste à laquelle un code dans MyClass l'a défini.Le client externe sera en mesure de modifier le contenu de cette liste –
Oui, c'est ce que je voulais dire, mais je me suis un peu bâclé avec mon explication. Je vais l'éditer – chrisbunney
+1 Miro A pour une clarification correcte. Et oui, votre solution en créant une copie de la liste est correcte (pour ce que vous voulez réaliser). – xagyg