Collections protégées

Le
MattBan
Bonjour.

J'ai des classes qui utilisent des collections. Évidemment, ces
collections ne doivent être modifiées qu'au travers des méthodes de
mes classes. Par exemple :

public class ListeDePoints {

private Set _points;
private Map _couleurDuPoint;

public void add(Point point, Couleur couleur)
{
_points.add(point);
_couleurDuPoint.put(point,couleur);
}

// .

}

Je veux que l'utilisateur ait accès à certaines collections. Mais je
ne veux pas :
-- l'utilisateur puisse modifier les collections autrement que par mes
méthodes
-- renvoyer un itérateur (l'utilisateur peut vouloir l'ensemble et je
ne veux pas qu'il fasse une copie de l'ensemble ; d'ailleurs,
l'itérateur lui permettrait de transgresser le premier point)
-- renvoyer une copie de l'ensemble (trop coûteux)

J'ai défini des classes Safe* (par exemple SafeIterator, SafeSet) qui
encapsulent les classes de java.util mais ne supportent pas les
méthodes optionnelles (remove, add, etc.), et je renvoie une version
encapsulée des collections.

public Iterator iterator()
{
return new SafeIterator(_points.iterator());
}

public Set points()
{
return new SafeSet(_points);
}

Connaissez-vous une implémentation déjà existante, éventuellement p=
lus
efficace, de ce problème ?


Question subsidiaire :
dans mon exemple au dessus, est-il utile d'avoir un Set pour la liste
des points, ou serait-il aussi efficace d'utiliser
_couleurDuPoint.keySet() ? La méthode keySet() a-t-elle un coût ou est-
elle triviale (je parle des implémentations classiques) ? (Il est
entendu qu'avec keySet(), je ne peux pas faire d'ajout, mais ce n'est
pas grave.)

--
ban
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Hervé AGNOUX
Le #227364
Dans la classe java.util.Collections, il y a diverses méthodes qui renvoient
des collections immuables. Par exemple

public static <T> List<T> unmodifiableList(List<? extends T> list)

"Returns an unmodifiable view of the specified list. This method allows
modules to provide users with "read-only" access to internal lists."

Cela t'irait-il ?


--
Hervé AGNOUX
http://www.diaam-informatique.com
MattBan
Le #227359
On Mar 22, 5:36 pm, Hervé AGNOUX
informatique.com.zz> wrote:
Cela t'irait-il ?


Excellent !
C'est exactement ce que je cherchais.

Tu as une réponse pour ma question subsidiaire ?

TestMan
Le #227358
On Mar 22, 5:36 pm, Hervé AGNOUX
informatique.com.zz> wrote:
Cela t'irait-il ?


Excellent !
C'est exactement ce que je cherchais.

Tu as une réponse pour ma question subsidiaire ?

Bonsoir,


Un coup d'œil dans les sources te donneras t'en apprendra plus sur ce
point ...

A+
TM


Hervé AGNOUX
Le #227337
MattBan wrote:


Tu as une réponse pour ma question subsidiaire ?


J'avoue être toujours ennuyé par ce genre de question... Pour décider
d'écrire une méthode ou une classe, le principal est de savoir si elle
correspond à quelque chose de la réalité, et non pas si elle est couteuse
ou facile ; "Early Optimisation Is The Mother Of All Evil And
Emmerdements", disait Zaratoustra.

Savoir si la méthode keySet a un cout ?... Non.

Si elle est facile ?... Oui.

... cela te va, comme réponse ? :-)


--
Hervé AGNOUX
http://www.diaam-informatique.com

Publicité
Poster une réponse
Anonyme